在CakePHP中使用条件的Auth和ACL

时间:2012-09-06 13:30:18

标签: php cakephp acl before-filter

我无法找到解决问题的方法。 我有一个使用Auth Component和ACL组件的CakePHP网站。 我不希望不活跃的用户能够登录。

我发现Auth组件中的userScope可以做到这一点。 所以在 beforeFilter 中的 AppController 中,我添加了这个:

    $this->Auth->userScope = array('User.active' => 1);

当然,在我的UserController beforeFilter中,调用了父方法。

但是,这不是故障,我仍然可以使用有效设置为0的用户登录。 我想这可能是因为ACL组件?

这是我在AppController中的beforFilter

    public function beforeFilter()
    {
    if (!$this->Session->check('Auth.User'))
        $this->layout = 'identification';
    $this->Auth->allow('display');

    //Configure AuthComponent
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
    $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'welcome');
    $this->Auth->userScope = array('User.active' => 1);
    }

我错过了什么?

2 个答案:

答案 0 :(得分:2)

如果你没有成功,你可以随时使用替代方案:

$user = $this->Auth->user();
if($user['User']['active'] == 0){
   $this->redirect($this->Auth->logout());
   $this->Session->setFlash('You are not active.');
}

答案 1 :(得分:1)

您使用的代码对Cake 2无效。请参阅http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#configuring-authentication-handlers

以下是一些应该有效的代码:

$this->Auth->authenticate = array('Form' => array('scope' => array('User.active' => 1)));