允许多个控制器根据用户在cakephp中的角色

时间:2016-10-12 10:54:57

标签: php cakephp authorization cakephp-2.x

假设有两个角色:一个是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。

1 个答案:

答案 0 :(得分:2)

处理此问题的正确方法是ControllerAuthorizeAuthComponent::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
}

您必须调整上述逻辑以满足您的需求。