【问题标题】:Can ACL allow all, but deny for one?ACL 可以允许所有,但拒绝一个吗?
【发布时间】:2011-09-09 16:45:19
【问题描述】:

我继承了一个应用程序,它大量使用 Cake 的 ACL(我从未使用过的组件),并且配置为 3 组 ARO 可以访问整个控制器。控制器中的每个操作都存在 ACO,但没有在操作级别显式分配权限。

我现在遇到了一种情况,我需要一个组访问一种特定的方法,但我需要拒绝其他 2 个组。有没有办法,而不是明确地为每个组分配每个操作的权限,而是简单地表明这 2 个组没有对所讨论的一个操作具有权限?

基本上,我想保留当前的“访问所有内容”默认值,但用“拒绝 [此特定操作]”覆盖它。我试过cake bake acl deny GroupName ControllerName actionName,但这似乎没有任何影响。

通过一个相当普遍的类比,我希望它的行为类似于 Apache 的 AllowOverride。默认情况下,允许所有人执行所有操作,但拒绝给定组执行给定操作。我不确定这是否有帮助,但确实有。

谢谢。

【问题讨论】:

    标签: cakephp cakephp-1.2


    【解决方案1】:

    此命令将授予您所有 ARO 访问您的 ACO cake acl grant RootGroupName RootControllerName all 的权限。

    之后,您可以指定要拒绝访问的特定操作:cake acl deny GroupName ControllerName|AcoActionName AcoActionName|permissions

    如果拒绝后的第二个值是 AcoActionName,则必须使用以下权限值之一:all, create, read, update, delete。

    一个小切线:

    这就是我认为可能存在混淆的地方。你的结构 ACL [ACOs 和 AROs] 只是通常与 控制器/动作设置的结构,但可以称为任何名称 您会喜欢,因为在每个操作中都会检查权限。 CakePHP ACL 组织在一个 Tree (data structure) 和外部节点可以设置数据库级别的 CRUD 权限。

    这是用户和 cmets 的示例 ACL 架构。

    Aco tree:
    ---------------------------------------------------------------
      [1] controllers (root node)
        [2] Comments
          [3] edit
          [4] add
          [5] delete
    ---------------------------------------------------------------
    
    Aro tree:
    ---------------------------------------------------------------
      [1] Groups (root node)
        [2] Users
        [3] Admin
    
    ---------------------------------------------------------------
    

    假设已全局授予访问权限,则所有请求者都可以访问所有对象。如果您想拒绝用户在提交 cmets 后对其进行编辑,您可以运行 cake acl deny Users Comments edit

    这里有一个很棒的 ACL 教程,特别是末尾的 App_Controller 代码,它有一个很好的 sn-p 可以检查与控制器/操作匹配的 ACO 结构的权限:User Permissions and CakePHP ACL。

    此外,CakePHP Book 有一个不错的 sn-p 可以将所有控制器/操作作为 ACO 规则插入:An Automatic Tool for Creating ACOs

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 2014-07-15
      • 2011-07-02
      • 2013-09-22
      • 2011-09-02
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多