Cakephp 2.6:明智的角色是授权不起作用

时间:2015-12-13 07:17:22

标签: cakephp cakephp-2.6

我在UsersController中有几个方法,我试图给角色明智的访问权限。 如果

  1. user_types == 1(用户可以访问所有方法)
  2. user_types == 2(用户无法访问admin_list方法。
  3. user_types == 3(用户只能访问forget_password方法)
  4. 在控制器中我试过下面的代码

    public $components = array('Session','RequestHandler','Auth'=>array(
    
                'loginRedirect' => array('controller' => 'users','action' => 'dashboard'),
                'logoutRedirect' => array('controller' => 'users','action' => 'login'),
                'authError'=>'You can not access this page!!',
                'authenticate' => array(
                'Form' => array(
                    'fields' => array(
                      'username' => 'email', //Default is 'username' in the userModel
                      'password' => 'password'  //Default is 'password' in the userModel
                    )
                  ),
                ),
                'authorize' => array('Controller')
            ));
    
            public function isAuthorized($user) {
                return true;
            }
    

    在我允许的过滤器之前

        $this->Auth->allow('login','logout');
    

    现在在UserController我尝试过以下代码

    public function isAuthorized($user) {
        // Admin can access every action
        if (isset($user['usertype_id']) && $user['usertype_id'] == 1) {
                return true;
        }
        else if(isset($user['usertype_id']) && $user['usertype_id'] == 2)
        {
             $this->Auth->deny('admin_list');
        }else
            $this->Auth->allow('change_password');
    
        return parent::isAuthorized($user);
        }
    

    问题是它总是返回真实。如果我使用user_type = 3登录,我可以访问所有方法。

1 个答案:

答案 0 :(得分:1)

Auth::allow()Auth::deny()用于定义非登录用户允许访问哪些操作(身份验证),并且不用于< EM>授权

为此,您必须像控制器一样在控制器中定义isAuthorized()。但是,此方法应返回true(已登录的用户/组有权访问操作)或false(授权被拒绝)。

您的UsersController::isAuthorized()方法应改写为:

public function isAuthorized($user) {

    if (!isset($user['usertype_id'])) {
        return false;
    }

    if($user['usertype_id'] == 2 && $this->action=='admin_list') {
       return false;           
    }

    if($user['usertype_id'] == 3) && $this->action!='forget_password'){
        return false;
    }

    return true;
}

有关ControllerAuthorize的更多信息,请参阅食谱。