Cakephpにおける認証設定
1. AppControllerに太字部分を追加
app]$ vi Controller/AppController.php
public $components = array(
'Session',
'Auth'=> array(
// ログイン後に Users/index へジャンプ
'loginRedirect' => array('controller' => 'reports', 'action' => 'index'),
// ログアウト後に /Pages/home へジャンプ
'logoutRedirect' => array('controller' => 'users', 'action' => 'login'),
'authorize' => array('Controller')
)
);
public function isAuthorized($user) {
if (isset($user['role']) && $user['role'] == 'admin') {
return true;
}
return false;
}
roleがadminであればすべてのページがOK、他では全てダメ
2.各コントローラでuserの場合の設定
app]$ vi Controller/UsersController.php
public function isAuthorized($user) {
if(isset($user['role']) && $user['role'] == 'user') {
if($this->action == 'login')return true;
if($this->action == 'logout')return true;
}
return parent::isAuthorized($user);
}
roleがuserの場合、アクションがloginとlogoutを許可している。
app]$ vi Controller/ReportsController.php
public function isAuthorized($user) {
if(isset($user['role']) && $user['role'] == 'user') {
if($this->action == 'index') return true;
if($this->action == 'add') return true;
if($this->action == 'view') return true;
if($this->action == 'edit') return true;
if($this->action == 'delete') return true;
if($this->action == 'sum') return true;
}
return parent::isAuthorized($user);
}
もっとスマートな書き方があるはずですが、コントローラ毎に設定。
まとめ
role : adminの権限はAppControllerで決定
role : userの権限は各コントローラで決定
0 件のコメント:
コメントを投稿