根据CakePHP中的用户组更改默认操作

时间:2014-05-28 13:42:54

标签: php cakephp routes cakephp-2.0

我有不同的用户群,例如管理员,作者,发布者和他们有单独的控制器我想在

的基础上登录后设置默认路径
  

$这 - > Auth->用户( 'GROUP_ID')

在beforefilter()方法的appcontroller中像这样

if ($this->Auth->User('group_id') == '1')
        {
            Router::connect('/', array('controller' => 'admin', 'action' => 'index'));
        } 
elseif($this->Auth->User('group_id') == '2')
        {
            Router::connect('/', array('controller' => 'author', 'action' => 'index'));
        } 
else {
            Router::connect('/', array('controller' => 'publisher', 'action' => 'index'));
        }

我在

中试过了
  

routes.php文件

在Config中使用$ _SESSION变量

因为在该文件中无法使用 $此。 主要目的是当用户登录时,它将带到他们的控制器,所以我可以有干净的URL 我不想要同一个控制器我必须使用检查组,而不是ACL库的功能将是浪费。 任何帮助将不胜感激以实现这一目标。提前致谢

2 个答案:

答案 0 :(得分:0)

//不要错过这个小东西的app_controller。请记住始终保持app控制器干净整洁。

function login(){
    //here you can say after login what's happen next
    if ($this->Auth->login()){
          $this->redirectUser();
    }

}

//redirect user groups
function redirectUser(){
    $role = $this->Auth->User('group_id');

    switch ($role) {
        case 1:
              return $this->redirect(array('controllers'=>'admin_controller', 'action'=>'action_name')); 
                 break;
        case 2:
              return $this->redirect(array('controllers'=>'author_controller', 'action'=>'action_name'));
        default:
              return $this->redirect(array('controllers'=>'user_controller', 'action'=>'action_name'));
                 break;
         }
}

如果您想使用自定义网址您还需要将其命名为routes.php

Route::connect('/admin', array('controller' => 'admin_controller', 'action' => 'index'));

其余链接

答案 1 :(得分:0)

根据你对Isaac答案的评论,你可以做这样的事情。 比如说,你可以在routes.php中找到:

Route::connect('/', array('controller' => 'some_controller', 'action' => 'index'));

然后在您的重定向控制器的index()方法中:

public function index() 
{
    $group = $this->User->Group->find('first', array( //assuming User belongsTo Group
        'conditions' => array(
            'id' => $this->Auth->User('group_id')
        ),
        'fields' => array('name')
        )
    )); //getting the name of the group the user belongs to

    call_user_func(array($this, strtolower($group['Group']['name']).'_index'));

}

然后在你的控制器中你可以有类似的东西:

protected function admin_index()
{
    //code for admins
}

protected function publisher_index()
{
    //code for publishers
}

protected function author_index()
{
    //code for authors
}

因此,您将所有代码放在同一个控制器上,但使用不同的方法分开。