0

すべてのユーザーがログインする必要があるアプリケーションがあります。認証と承認Authのためにコンポーネントを使用しています。ACL

私は基本的に、管理コントローラーの `beforeFilter() で次のようなことをしています:

if(!$this->Acl->check(array('model' => 'User', 'foreign_key' => $this->Auth->user()['id']), 'Admin', 'read')) 
{
    pr('You are NOT allowed to be here!');
} 

これは、ログインしているすべてのユーザーに適しています。一部のユーザーは管理ページを表示でき、一部のユーザーは表示できません。

ただし、ログインしていないときに/adminに移動すると、次のようになります。

AclNode::node() - "Array ( [Aro0.model] => model [Aro0.foreign_key] => U ) " で識別される Aro ノードが見つかりませんでした

(なぜ「U」が印刷されるのかわかりません)。ルックアップをしようとしているようですが、ユーザー情報がそこにないため、クラッシュします。私はここで何かが欠けていると確信しています。ユーザーがログインしているかどうかを確認することで、問題を回避できます。

if($this->Auth->user()) //do the ACL check

しかし、私はそのアプローチが好きではなく、間違っていると思います。

ある種のデフォルト設定が必要ですか?

4

1 に答える 1

0

このエラーは、データベースに acos のノードがないことを意味します。また、関係のforeign_keyが間違っています! おそらく、Cake Book - シンプルな ACL 制御アプリケーションを確認する必要があります。後で、理解できない点について詳しく説明します。

beforeFilter() では、Guest のみが許可する必要があり、残りの権限は DB にあります。

于 2012-07-10T20:17:35.377 に答える