CakePHP Auth 组件中的角色

Posted

技术标签:

【中文标题】CakePHP Auth 组件中的角色【英文标题】:Roles in CakePHP Auth Component 【发布时间】:2011-09-09 14:10:28 【问题描述】:

我正在尝试在 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 等)并根据用户角色赋予不同的权限。

【问题讨论】:

【参考方案1】:

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

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

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

CakePHP Book :: Simple Acl controlled Application

【讨论】:

+1 对于 AcL 提示。您肯定希望为此使用 ACL 功能,因为这正是您想要的。 我希望避免使用 ACL 组件,因为我已经多次尝试了本教程以及各种其他插件,但均未成功。如果您使用过的书之外还有其他内容,我将不胜感激。另外,如果您使用本书教程,当您更改用户角色时,它不会编辑用户的 acl。 @Chris 当角色发生变化时,您可以在代码中轻松检测到这一点并执行Acl::allow()。 Acl 是要走的路,我和这里的其他人一样对此充满信心。此外,您可以通过ClassRegistry::init() 获取对它的引用来直接编辑acl 表。本教程中的 Aco 示例创建代码执行此操作,并让您深入了解如何在使用组件时获得附加功能。值得再试一次。【参考方案2】:

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

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 中,这样它会影响一切。

【讨论】:

我原来有那个,不知道为什么现在没有了。但这并没有回答这个问题。问题在于条件。我希望该功能进入每个控制器(UsersController、PatientController、AdmissionsController 等)并根据用户角色给予不同的权限。 如果您对每个控制器有不同的权限,您只能在每个控制器中手动设置它们,或者按照@generalopinion 的建议使用 ACL。 @generalopinion 你已经说服了我,尽管我很难理解如何去做。如果有人可以推荐一个好的(超越蛋糕的)教程或写一个好的教程,我相信他们会得到很多掌声。

以上是关于CakePHP Auth 组件中的角色的主要内容,如果未能解决你的问题,请参考以下文章

带有 CakePHP Auth 组件的唯一用户名和电子邮件

使用 CakePHP 'Acl' 组件

CakePHP 3 Auth注销 - 错误:未找到身份验证适配器“loginAction”

cakephp : 使用 $validate 数组验证登录表单

具有两个模型会话的 Cakephp 身份验证组件

CakePHP Auth 如何允许特定的控制器和动作