【问题标题】:Zend ACL deny parent roles only from child role's resourcesZend ACL 仅拒绝来自子角色资源的父角色
【发布时间】:2012-02-23 18:41:35
【问题描述】:

我正在尝试在 Zend 框架中实现 ACL。我希望父角色可以访问所有资源,但允许子角色使用的资源除外。到目前为止,我有以下代码:

$acl = new Zend_Acl();
$acl->addRole('visitor')
    ->addRole('subscriber', 'visitor')
    ->addRole('editor', 'subscriber')
    ->addRole('admin', 'editor')
    ->addRole('superadmin', 'admin')
    ->allow();

$acl->addResource('index')
    ->addResource('blog')
    ->addResource('users')
    ->addResource('admin');

acl->allow('subscriber', 'blog', 'index')
    ->allow('editor', 'blog', array('add', 'edit'))
    ->allow('admin', 'admin')
    ->allow('superadmin', 'users');

我希望“访问者”能够访问所有资源 除了允许子角色订阅者、编辑、管理员、超级管理员的资源。对于所有其他角色和资源也是如此。 “访问者”将有权访问所有资源,但不能访问允许子角色使用的资源。

【问题讨论】:

    标签: zend-framework acl


    【解决方案1】:

    我也在使用 Zend_Acl,我想我明白了你的意思。 “问题”是,默认情况下,Zend 拒绝访问每个资源,而您没有指定某些用户有权访问所需的资源。

    这意味着当你创建你的 ACL(角色、资源、权限)时,你必须告知你想要授予访问者访问他可以访问的每个资源的权限。

    我相信 Zend 以这种方式工作是出于安全考虑,因为通过这种方式,您可以确保只有您授予访问权限的用户才有权与指定的资源进行交互。

    【讨论】:

      【解决方案2】:

      “subscriber”不是“visitor”的父级,而是它的子级。因此,订阅者继承访问者的所有资源和权限。 您并没有真正提出任何问题,但似乎您想要的是 Zend_Acl 的预期行为。

      $acl = new Zend_Acl();
      $acl->addRole('visitor')
      ->addRole('subscriber', 'visitor')
      ->addRole('editor', 'subscriber')
      ->addRole('admin', 'editor')
      ->addRole('superadmin', 'admin');
      
      $acl->addResource('index')
      ->addResource('blog')
      ->addResource('users')
      ->addResource('admin');
      
      $acl->allow('subscriber', 'blog', 'index')
      ->allow('editor', 'blog', array('add', 'edit'))
      ->allow('admin', 'admin')
      ->allow('superadmin', 'users');
      

      添加$acl->allow('visitor', 'index', 'index'),visitor 现在可以访问 index 页面,其子项也可以访问索引页面。但是visitor 没有访问资源blog 和特权index,只有订阅者和它的孩子可以访问这个页面。

      你应该阅读documentation of Zend_Acl,这里有很多很好的例子。

      【讨论】:

      • 但使用此代码的访问者将被拒绝访问博客的查看操作$acl->isAllowed('visitor', 'blog', 'view'); 或任何其他资源。
      • 正确。所以基本上,您希望您的访问者成为超级管理员,而您的超级管理员成为访问者?如果没有,您想为访问者提供哪些资源?
      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 2018-10-03
      • 1970-01-01
      • 2012-12-21
      • 2021-01-03
      • 2021-05-25
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多