cakePHP-从beforeFilter为admin角色设置loginRedirect

时间:2014-02-12 16:46:42

标签: cakephp cakephp-2.0

我正面临这个奇怪的问题。我试图从普通用户的角色更改admin角色的默认loginRedirect。

你在AppController的组件变量中设置了auth键,如下所示:

'Auth' => array(
            'loginRedirect' => array(  
                'controller' => 'donors',
                'action' => 'index'
            )
    )

现在在beforeFilter回调中我设置了这个:

if($this->Auth->user('role') == 'admin'){
        $this->Auth->loginRedirect = array(
            'controller'=>'users',
            'action'=>'admin_index',
            'prefix'=>'admin',
            'admin'=>true
        );
}

但是,这不起作用,if条件永远不会满足。我希望在用户登录时运行。如果我添加else条件并重复上面显示的相同代码,它就可以工作,管理员会重定向到所需的页面。

任何人都可以指导我如何正确地执行此操作吗?提前致谢

2 个答案:

答案 0 :(得分:1)

如果用户未登录,$this->Auth->user()将返回null。 beforeFilter()将在任何操作运行之前运行,因此仍未调用login()操作。

调用$this->Auth->login()后重定向并成功。例如。在您的UsersController::login()操作中(或您用于登录的任何操作):

if ($this->Auth->login()) {
    if($this->Auth->user('role') == 'admin') {
        $this->redirect(array(
            'controller'=>'users',
            'action'=>'admin_index',
            'prefix'=>'admin',
            'admin'=>true
        );
    }
}

答案 1 :(得分:0)

而不是$this->Auth->loginRedirect使用$this->redirect( array('controller' => 'users', 'action' => 'admin_index');

它不太复杂