Zend的Acl允许仅在控制器中创建资源
但是,控制器可能位于任何模块上,而不仅仅是默认模块。所以,我在互联网上阅读了一些文章,我找到了一篇并尝试了这个:
$acl -> addResource(new Zend_Acl_Resource("admin"));
$acl -> addResource(new Zend_Acl_Resource("admin:page"), "admin");
$acl -> addResource(new Zend_Acl_Resource("admin:posts"), "admin");
但是,当我浏览相应的页面时,我收到有关未找到资源page
或未找到posts
的错误。
如何设置特定于模块的ACL资源?
$acl -> addrole(new Zend_Acl_Role('guest'))
-> addrole(new Zend_Acl_ROle('admin'), 'admin');
$acl -> addResource(new Zend_Acl_Resource("page")); //controller with same name in admin module exists
$acl -> addResource(new Zend_Acl_Resource("admin"));
$acl -> addResource(new Zend_Acl_Resource("admin:page"), "admin");
$acl -> addResource(new Zend_Acl_Resource("admin:posts"), "admin");
$acl -> deny(null, null);
$acl -> allow('user', 'page', 'view');
$acl -> allow('admin', null);
答案 0 :(得分:1)
我猜你发布的代码是某种伪代码,因为它无效。不过,这个答案应该完全正常。
$acl->addrole(new Zend_Acl_Role('guest'))
->addrole(new Zend_Acl_Role('admin'), 'guest');
$acl->addResource(new Zend_Acl_Resource("page"));
$acl->addResource(new Zend_Acl_Resource("admin"));
$acl->addResource(new Zend_Acl_Resource("admin:page"), "admin");
$acl->addResource(new Zend_Acl_Resource("admin:posts"), "admin");
$acl->deny();
$acl->allow('guest', 'page', 'view');
$acl->allow('admin');
// Lets run some quick tests...
var_dump($acl->isAllowed('guest', 'page', 'view')); // true
var_dump($acl->isAllowed('guest', 'page', 'edit')); // false
var_dump($acl->isAllowed('guest', 'admin:page', 'view')); // false
var_dump($acl->isAllowed('admin', 'page', 'view')); // true
var_dump($acl->isAllowed('admin', 'page', 'edit')); // false
var_dump($acl->isAllowed('admin', 'admin:page', 'view')); // true