2012-01-30 16 views
1

私はcakephpのACL機能を学んでいます。私はcakephpのdocsしかし、行っている。もっと学ぶために、私はcroogoやalaxos ACLプラグインのようなACLプラグインのコード/ dbをチェックしました。 aros_acosテーブルには、_create、_read、_update、_deleteのような列があることがわかります。これらの例(croogo/alaxos)から、アクションのために、 - add(ユーザーコントローラの下で)、_create、_read、_update、_deleteの各列に値が1 1 1 1として表示されます。名前が示すように、addは_create(1 0 0 0)にのみマップする必要があります。また、このシナリオでは4列が必要ですか?Cakephp ACLアクションモードvs CRUDモード

CRはCRUDモードの動作モードと混同しています。私のアプリケーションでは、CRUD以外の承認、拒否などいくつかの機能があります。これらのアクションの列を追加する必要はありますか?または、マップアクションがこれに適しています(その場合は、コントローラ内のすべてのアクションをマップする必要がありますか)。また、私のアプリでは、所有者に編集権限と所有者権限を与える必要があります。より良い方法でCakephp ACLでこれらのすべてを行うには?

答えて

5

これは、Aclで何をしたいかによって異なります。あなたがCroogoやAlaxos Aclプラグイン(途中で私のプラグイン)で見たのは、Aclを使っていくつかのアクションへのアクセスを許可/拒否することです。 これはAuthComponentとAclComponentを併用することで実現されます。潜在的に3つの引数を取ります

function check($aro, $aco, $action = "*") 

:これを行うときは、ケーキのコードを見れば、パーミッションチェックは、以下の方法でDbAclクラスで行われています。明らかに第三引数なしでコールされ

return $Acl->check($user, $this->action($request)); 

この関数への呼び出しは次の行にauthorize()関数でActionsAuthorizeクラスによって行われます。

したがって、この第3引数は基本的には何ですか?これは、aros_acosデータテーブルの_xxxフィールドを処理する方法です。つまり、Auth + Aclコンポーネントはこれらの_xxxフィールドを使用して権限をチェックしません。 第3引数が使用されていない場合、1に設定されたすべてのフィールドは許可されており、1つ以上のフィールドが-1に設定されている場合、拒否されたことを意味します。 個人的にAlaxos Aclプラグインのために、私は拒否のためにすべてのフィールドを-1に設定することを選択しました。

アプリケーションに関して、その「機能」がアクションにマップされている場合は、おそらくこれらの_xxxフィールドを忘れてコアAuth + Aclメカニズムを使用することができます。

あなたの最後の質問(オーナーの編集と削除)については、Cake ACLのよくある質問です。 ほとんどの場合、Object.user_idと記録されたユーザーIDを比較して、ユーザーがレコードを編集/削除できるかどうかを判断する方が簡単です。 Cake ACLはレコードの所有者をサポートしていません。

関連する問題