【问题标题】:Denying access to action with Zend ACL causes Navigation link to disappear使用 Zend ACL 拒绝访问操作会导致导航链接消失
【发布时间】:2010-06-03 06:14:06
【问题描述】:

我有一个包含四个操作的计划控制器:

class ScheduleController extends Zend_Controller_Action {

    public function indexAction(){ ... }

    public function viewAction(){ ... }

    public function addAction(){ ... }

    public function deleteAction(){ ... }

}

所以我用这样的数组设置了 Zend_Navigation:

array(

    ...other links here...

    array(
        'controller'=> 'schedule',
        'action' => 'index',
        'label' => 'Schedule',
        'resource' => 'schedule',
        'privilege' => 'index',
        'privilege' => 'view',      
        'privilege' => 'add',
        'privilege' => 'edit',
    )
);

我还在 ACL 中创建了两个组:用户和管理员。我想对其进行设置,以便用户可以访问“索引”和“查看”,而管理员可以访问所有内容。所以我从这个开始:

class My_AccessControlList extends Zend_Acl {
    $this->addRole(new Zend_Acl_Role('user'));
    $this->addRole(new Zend_Acl_Role('admin'), 'user');
    ...
    $this->addResource(new Zend_Acl_Resource('schedule'));
    $this->deny();
    ...

现在看来,除非我添加这一行:

    $this->allow('user', 'schedule');

该链接不会显示在导航中。然后如果我添加这个:

    $this->deny('user', 'schedule', 'add');

用户被阻止执行“添加”操作,到目前为止一切顺利。但如果我再添加:

    $this->deny('user', 'schedule', 'edit');
    --or change it to this--
    $this->deny('user', 'schedule', array('add', 'edit'));

用户被适当地阻止,但链接从导航对象中消失。有谁知道我做错了什么?谢谢。

【问题讨论】:

    标签: zend-framework zend-navigation zend-acl


    【解决方案1】:
    array(
        'controller'=> 'schedule',
        'action' => 'index',
        'label' => 'Schedule',
        'resource' => 'schedule',
        'privilege' => 'index',
        'privilege' => 'view',      
        'privilege' => 'add',
        'privilege' => 'edit',
    )
    

    ...您将 'privilege' 键覆盖了 3 次,这会产生一个包含最后一个值 'edit' 的键 'privilege' 的数组。 “特权”键应包含四个值的数组

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 1970-01-01
      • 2011-08-09
      • 2017-03-25
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2012-05-12
      相关资源
      最近更新 更多