假设有两个角色:一个是admin
,另一个是restaurant_owner
。
我想要访问restaurant_owner
的某些页面。
在AppController
中,我使用了beforeFilter
函数。这是代码..
public function beforeFilter() {
if($this->Auth->user('role') == 'restaurant_owner'){
/* Controllers Name, that Admin want to give access to restaurant admin*/
$this->loadModel('Userpermission');
$AuthPermission = $this->Userpermission->find('first',array('conditions' => array('Userpermission.user_id' => $this->Auth->user('id'))));
print_r($AuthPermission); //returns controller names e.g. receipes, menuitems
}
}
我的问题是,除了少数几个外,我如何拒绝所有控制器访问角色restaurant_owner
?我正在使用CakePHP 2.x。
答案 0 :(得分:2)
处理此问题的正确方法是ControllerAuthorize
和AuthComponent::isAuthorized()
回调。
首先,您必须在AppController
中启用此功能。编辑您的Auth
配置和阵列,并添加以下内容:
public $components = array(
'Auth' => array('authorize' => 'Controller'),
);
然后将以下内容添加到restaurant_owner
应有权访问的控制器:
public function isAuthorized($user) {
if ($user['role']=="restaurant_owner") {
return true;
}
return parent::isAuthorized($user);
}
最后,将以下内容添加到AppController
:
public function isAuthorized($user) {
if ($user['role']=="restaurant_owner") {
return false;
}
return true; //Every other role is authorized
}
您必须调整上述逻辑以满足您的需求。