CakePHP Auth组件中的角色

时间:2011-06-06 20:09:39

标签: cakephp authentication

我试图在CakePHP Auth组件中使用角色。角色将是用户,管理员,超级管理员等。我很难根据用户角色在每个控制器中放置条件。我尝试了以下内容并且它没有工作:

function  beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('add');

        if($this->Auth->user('roles') == 'admin') {
            $this->Auth->allow('index', 'add', 'edit', 'delete');
        } 
        elseif($this->Auth->user('roles') == 'super-admin') {
            $this->Auth->allow('index', 'add', 'edit', 'delete', 'make_super_admin', 'privileges'); //Note difference in superadmin priviledges

        }

问题在于有条件的。我希望函数进入每个控制器(UsersController,PatientsController,AdmissionsController等)并基于用户角色,给予不同的权限。

2 个答案:

答案 0 :(得分:1)

将此逻辑放在beforeFilter()类的AppController中应该可以解决问题。

我的另一个想法是,您可能应该考虑将Acl组件与Auth组件结合使用。 Acl组件将为您提供对每个控制器中每个操作的开箱即用的精细控制。如果使用正确,您只需要为每个角色的操作设置权限,并且您当前尝试执行的访问控制检查的类型将自动执行。

这本书有一个关于如何使这项工作的优秀教程。我在我的应用程序中使用它,非常值得投入时间来设置和理解它是如何工作的。参考下文。

CakePHP Book :: Simple Acl controlled Application

答案 1 :(得分:0)

我不知道这是不是你的问题,但是如果你想让每一个动作都使用*而不是什么:

function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('add');

    if($this->Auth->user('roles') == 'admin') {
        $this->Auth->allow('*');
    } elseif($this->Auth->user('roles') == 'super-admin') { 
        $this->Auth->allow('*');
    }
}

如果你想为每个控制器设置这些权限,最好将它放在你的AppController中,这样就会影响一切。