2012年4月8日日曜日

Docs | ZiSTA


前回ACLの利用方法には「アクション・モード」と「CRUD・モード」の使い方があると説明しました。「アクション・モード」と「CRUD・モード」とはAuthコンポーネントの$authorizeプロパティを'actions'または'crud'のどちらにセットするかで決定します。


AuthコンポーネントがAclコンポーネントを「アクション・モード」と「CRUD・モード」それぞれの場合にどのように使ってパーミッションをチェックしているかを見て理解してみます。実際のパーミッションをチェック方法が分かるとACOに何を登録するのか、どのようにパーミッションを設定するのかが見えてきます。


Authコンポーネントは次のいずれかのコードでAclコンポーネントのcheckメソッドを使っている事が分かります。checkメソッドに渡す引数が微妙に異なっている点に注意して下さい。どちらのコードが呼ばれるかは、Authコンポーネントの$authorizeプロパティが'actions'または'crud'のどちらにセットされているかによって決定されます。この$authorizeプロパティがモードの選択なのです。


$authorizeプロパティが'actions'の場合:アクション・モードでチェックしている。

$valid = $this->Acl->check($user, $this->action()); 

$authorizeプロパティが'crud'の場合:CRUD・モードでチェックしている


見つけるためにカールソン肝油
$valid = $this->Acl->check(                         $user,                         $this->action(':controller'),                         $this->actionMap[$this->params['action']]                     ); 

ここでAclコンポーネントのcheckメソッドも確認しています。1番目の引数がARO、2番目の引数がACOです。3番目の引数はアクションのパーミッションの種類(Create, Read, Update, Delete)です。

$Acl->check($aro, $aco, $action); 

AuthコンポーネントがAclコンポーネントのcheckメソッドをどのように使っているかより詳しく見てみます。


1番目のAROにあたる引数は、Authコンポーネントを使ってログインしたユーザーになります。ユーザあるいはユーザーの所属するグループに対してパーミッションがチェックされます。


2番目のACOにあたる引数は、Authコンポーネントは自身のaction()メソッドを呼びその返り値です。このaction()メソッドの返り値に対応するオブジェクトがACOにも登録されていなければならない事になります。ACOに何を登録すべきかを知る大きな手がかりです。またどちらのモードを利用しているかによってaction()メソッドを呼び出す時の引数が違う事も分かります。


musceを細断処理する方法


それではAuthコンポーネントはaction()メソッドによってどのような値を取得しているのでしょうか。それはコントローラ名とアクション名(アクション・モード・モード)、あるいはコントローラー名(CRUD・モード)です。


アクション・モードの場合:
 '/$actionPath/コントローラ名/アクション名/'
CRUD・モードの場合:
 '/$actionPath/コントローラ名/'


CRUD・モードの場合、アクション名をACOに登録する必要がない事が分かります。


3番目の引数はアクション・モードの時には利用されずCRUD・モードと時にだけ利用されている事が分かります。これはアクション・モードの時には指定されたACOへのアクセスが許可されているどうかかだけをチェックしています。一方CRUD・モードの時には現在のアクションが持つパーミッションのCRUDの種類(Create, Read, Update, Deleteのいずれか)に許可されているかをチェックしています。例えば'view' アクションのCRUDの種類は 'read'になります。現在のアクションがどのCRUDの種類に該当するかはAuthコンポーネントのactionMap属性に事前に設定しておきます。(Aclコンポーネントではありません)ちなみに初期値として('index'=> 'read','add'=> 'create','edit'=> 'update','view'=> 'read','remove'=>'delete')が登録されています。


なぜ犬がプラスチックを食べていますか?


アクション・モードの場合、CRUDの種類という考え方は利用出来ません。


2つのモードでのcheckメソッドの2番目と3番目の引数の使われ方の違いを理解すると、事前のACOに登録する内容が異なり、パーミッションを割り当てる方法も違う事が分かると思います。どちらのモードを使うかによって事前に準備する作業も異なるのです。


まとめ
アクション・モードは特定のアクションに対して許可あるは拒否をチェックする方法で、CRUD・モードは特定のコントローラーのCRUDの種類でパーミッションをチェックする方法です。


アクション・モード:
 特定のアクションに対して許可あるは拒否をチェックする方法
 ACOにコントローラとアクションの両方を登録する
 パーミッションはACOに対して許可あるいは拒否のいずれかを割り当てる
 (Acl->allow( $aro, $aco)、またはdeny( $aro, $aco))



CRUD・モード:
 コントローラーに対してパーミッションの種類でチェックする方法
 ACOにコントローラーのみ登録する
 コントローラー内のアクションをCRUDのいずれに該当するか設定しておく(AuthコンポーネントのactionMap属性)
 パーミッションはACOに対するCRUDそれぞれについて割り当てる
 (Acl->allow( $aro, $aco,'create')、Acl->allow( $aro, $aco,'edit')など)


これらをふまえた上でAclコンポーネントの公式マニュアルとを読み返してみると見て下さい。もう一度紹介します。

CakePHPのマニュアルの5.1 アクセス制御リストは'CRUDモード'による利用例で、10.2 ACL を制御するシンプルなアプリケーションはアクション・モードによる利用例に基づいて説明されています。



These are our most popular posts:

ACL(アクセスリスト)とは CCNA実機で学ぶ

ACLは、パケットレベルのフィルタリングが主な機能です。もっと高度なフィルタリングが 必要な場合は、より高性能なFW専用機が必要になります。 ◆アクセスリストの種類 アクセスリストでは、以下の種類のアクセスリストを作成することができます。 read more

アクセス制御リスト - Wikipedia

アクセス制御リスト(アクセスせいぎょリスト、Access Control List、ACL)とは、 オブジェクト(受動体)に付属する許可属性のリスト。コンピュータ ... かを列挙したもの。 例えば、ファイル X についてのアクセス制御リストに要素 (Alice, delete) があれば、 Alice はファイル X を削除することができる。 ... ているかである。 ACLを用いる制御には 2種類ある。 ... この「アクセス制御リスト」はコンピュータに関連した書きかけ項目です。 この記事を ... read more

とことんDominate!! 〜Notes/Domino Lab〜: 【SA入門:001】ACLの種類 ...

2006年8月2日 ... 【SA入門:001】ACLの種類を放置していませんか?(1). NotesDBをサーバー上に配備 し、情報共有するときは、アクセス制御リスト(ACL)を設定し、セキュリティを確保します。 Notesを導入した当初、どちらかというと業務の中で利用していく ... read more

ACL - 標準ACL,拡張ACL,IP名前付きACL -

ACLの種類. Cisco IOSで実装させるACLには実に多くの種類があります。標準ACL、 拡張ACL、IP名前付きACL、 ロックアンドキーダイナミックACL、再帰ACL、タイムレンジ ACL、 ... 標準ACLは最も古いタイプのACLで、IOSversion 8.3に導入されたものです。 read more

0 件のコメント:

コメントを投稿