【问题标题】:Roles in CakePHP Auth ComponentCakePHP Auth 组件中的角色
【发布时间】: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 等)并根据用户角色赋予不同的权限。

【问题讨论】:

    标签: cakephp authentication


    【解决方案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 你已经说服了我,尽管我很难理解如何去做。如果有人可以推荐一个好的(超越蛋糕的)教程或写一个好的教程,我相信他们会得到很多掌声。
    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多