我正在按角色和资源检查视图中允许的内容,并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; ?>
这个想法是隐藏内容,包括<h2>
标签,如果用户无权访问资源 1、2 或 3。
我知道,我可以写这个:
<?php if($this->acl->isAllowed('admin::resource1') || $this->acl->isAllowed('admin::resource2') || $this->acl->isAllowed('admin::resource3')): ?>
<h2>Resources</h2>
...
<?php endif; ?>
但我不仅有这三个资源,如果我更改某些内容,我不想为此类语句添加新资源。
使用 inheritsRole 函数。
这样:
if($this->acl->inheritsRole('user', 'admin')) {
/* display content for an admin */
}