0

我对 cakePHP 还很陌生,并且已经阅读了 cake 网站上的所有教程。我正在使用 cake 2.1 构建一个小型示例应用程序并遇到了问题。基本上,我希望管理员用户在登录时重定向到与普通用户重定向到不同的页面。我敢肯定有一个简单的方法可以做到这一点,但我正在努力!

我启用了管理路由并正在使用身份验证组件(以及 ACL 组件,尽管这不会影响我的问题)。我有 2 个登录,一个用于 admin - admin_login() 和一个用于普通用户的登录 - login() - 正常的非管理员登录工作正常。

在我的 AppController.php 我有这个:

class AppController extends Controller {

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        )
    ),
    'Session'
);
public $helpers = array('Html', 'Form', 'Session');

public function beforeFilter() {
    //Configure AuthComponent
    $this->Auth->allow('display'); // Allows access to the homepage of the app
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
    $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
}

}

因此,您可以看到默认设置是用户在登录时被重定向到帖子控制器的 add() 函数,该函数工作正常。但是,如何为我的 admin_login() 函数设置不同的登录重定向?

我在这里阅读了许多帖子,但大多数与蛋糕的旧版本有关,而不是蛋糕 2。

如果有帮助,这是我在 UsersController.php 中的 admin_login 函数

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('logout');
}

public function admin_login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            if ($this->Session->read('Auth.User')) {
                $this->Session->setFlash('You are logged in!');
                //$this->redirect($this->Auth->redirect());

                // This doesnt work! Grrrrrr
                //$this->redirect(array('controller'=>'pages', 'action'=>'admin_index'));

                // This nearly works...
                if($this->Auth->user())$this->redirect(array('controller' => 'pages', 'action' => 'admin_index'));
            }            
        }
        else {
            $this->Session->setFlash('Your username or password was incorrect.');
        }
    }

谁能指出我正确的方向?

4

2 回答 2

2

如果您的数据库中有角色->“管理员,用户”,请放入您的 AppController - beforeFilter():

if($this->Auth->user('role') == 'admin'){
     $this->Auth->loginRedirect = array('controller' => 'controller1', 'action' => 'action1');
}else{
     $this->Auth->loginRedirect = array('controller' => 'controller2', 'action' => 'action2');
}

如果您想知道 $this->Auth->user() 中的内容,只需输入:

debug($this->Auth->user());
于 2012-07-24T10:23:49.310 回答
0

也许这有效:

if($this->request->params['admin']) {
    $this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'index', 'admin' => true);
}
else {
    $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
}

用这些行替换 beforeFilter() 中的 loginRedirect 设置

于 2012-07-24T09:08:02.980 回答