CakePHP2系のACLプラグインでログアウトユーザにアクションを許可するためのコード(方法)
※筆者は
CakePHP2でACLを超簡単管理できるプラグイン「ACL Plugin 2」 - たきゃはしです
このサイトの情報からACLプラグインを使っていましたが、2015年6月現在 ACLプラグインであるPlugin ACLがダウンロードできない状態になっています。
2015年7月追記
Alaxos ACL Plugin for CakePHP version2.3.0は
公式では入手不可となっていますが(サイトがなくなっている)
非公式ですが、ここ
https://github.com/oldskool/Acl
からダウンロードできます!
(ACLの情報に関してご存知の方はコメント下さい。)
ACLプラグインを入れた場合には、 AppController.phpの中身は
<?php App::uses('Controller', 'Controller'); class AppController extends Controller { public $components = array( 'Acl', 'Auth' => array( 'authorize' => array( 'Actions' => array('actionPath' => 'controllers') ) ), 'Session' ); public $helpers = array('Html', 'Form', 'Session'); public function beforeFilter() { $this->set('auth', $this->Auth); //viewからもAuthを使えるようにする。 //これをコメントアウトすると全体的にサイトが見れなくなります。 //AuthComponentの設定 $this->Auth->loginAction = array('controller' => 'コントローラー', 'action' => 'アクション'); //ログイン失敗するとここに飛ぶ $this->Auth->logoutRedirect = array('コントローラー' => 'users', 'action' => 'アクション'); //ログアウトしたらここに飛ばす $this->Auth->loginRedirect = array('controller' => 'コントローラー', 'action' => 'アクション');//ログインしたらここに飛ばす } }
こんな感じになります。
また、AppController以外のそれぞれのコントローラーの
public $components={}
には "Auth"と絶対に書いてはいけません!!
既にAppControllerで書いてあるからです。
それぞれのコントローラーでは、beforeFilterというものを用いて、 一般ユーザー(ログインしていないユーザー)にどこまでアクションを許可するかを 決めることができます。
書き方は、アクションと同列の階層に
<?php public function beforeFilter(){ $this->set('userSession', $this->Auth->user()); $this->Auth->allow( 'index', 'view' ); $this->set('auth', $this->Auth);// // ロボット避け(必要な場合) // $this->set('robots_for_layout','noindex'); // ロボット避け }
上記のように書きます。 この場合、 indexアクションとviewアクションを許可しているのが分かります。
最後のアクション'view'のうしろにはカンマが付いていないことに注意しましょう。 もし許可したいアクションが1つの場合はカンマは要りません。
以上です。