Zend_Acl我需要类似$ acl-> hasParentResource()的东西

时间:2013-10-02 17:43:54

标签: php zend-framework permissions resources zend-acl

我正在使用Zend_Acl按角色和资源检查视图中允许的内容以显示特定内容。 这工作正常,但我希望有一个像hasParentResource()方法来检查资源的父项。

一个例子:

$acl->add(new Zend_Acl_Resource('default'));
$acl->add(new Zend_Acl_Resource('admin'));
$acl->add(new Zend_Acl_Resource('admin::resource1'), 'admin');
$acl->add(new Zend_Acl_Resource('admin::resource2'), 'admin');
$acl->add(new Zend_Acl_Resource('admin::resource3'), 'admin');

/roles
$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('user'), 'guest');
$acl->addRole(new Zend_Acl_Role('admin'), 'user');

//deny/allow
$acl->deny();
$acl->allow('guest', 'default');

$acl->allow('user', array(
    'admin::resource1',
    'admin::resource3'
));

$acl->allow('admin');

在视图中:

<h1>Admin</h1>
Lorem ipsum dolor...
<?php if($this->acl->hasParentResource('admin')): ?>
    <h2>Resources</h2>
    <?php if($this->acl->isAllowed('admin::resource1')): ?>
        Ressource 1 stuff
    <?php endif; ?>
    <?php if($this->acl->isAllowed('admin::resource2')): ?>
        Ressource 2 stuff
    <?php endif; ?>
    <?php if($this->acl->isAllowed('admin::resource3')): ?>
        Ressource 3 stuff
    <?php endif; ?>
<?php endif; ?>

如果用户无法访问资源1,2或3,我们的想法是隐藏包含<h2>标记的内容。
我知道,我可以这样写:

<?php if($this->acl->isAllowed('admin::resource1') || $this->acl->isAllowed('admin::resource2') || $this->acl->isAllowed('admin::resource3')): ?>
    <h2>Resources</h2>
    ...
<?php endif; ?>

但我没有这三种资源,如果我改变了什么,我不想为这些陈述添加新的资源。

1 个答案:

答案 0 :(得分:0)

使用inheritsRole函数。

这样:

if($this->acl->inheritsRole('user', 'admin')) {
  /* display content for an admin */
}