CakePHP身份验证组件中的角色

zour9fqk  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(166)

我尝试在CakePHP Auth组件中使用角色。角色可以是user、admin、super-admin等。我在根据用户角色在每个控制器中放置条件时遇到了困难。我尝试了以下方法,但没有成功:

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等),并根据用户角色,给予不同的权限。

oug3syen

oug3syen1#

将此逻辑放在AppController类的beforeFilter()中应该可以实现此目的。
我的另一个想法是,也许您应该考虑将Acl组件与Auth组件结合使用。Acl组件将为您提供对每个控制器中的每个操作的开箱即用的粒度控制。如果使用正确,您只需要为每个角色的操作设置权限,您当前尝试执行的访问控制检查类型将自动执行。
这本书有一个很好的教程如何使这一工作。我正在我的应用程序中使用它,它是非常值得的时间投入到安装和了解它是如何工作的。参考下面。
CakePHP Book :: Simple Acl controlled Application

hgc7kmma

hgc7kmma2#

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

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中,这样它将影响所有内容。

相关问题