我有几个Zend_Acl
对象实例,比如这个(每个模块一个):
class My_Acl_Module1 extends My_Base_Acl
{
public function __construct()
{
parent::__construct();
$this->addResource('News_Model_Entry');
$this->deny('guest', 'News_Model_Entry', 'index', new News_Model_Acl_Assert_CategoryPrivate());
}
}
class My_Base_Acl extends Zend_Acl
{
public function __construct()
{
$this->addRole('guest');
}
}
如何将它们合并为一个 ACL 对象以在导航容器中使用?
编辑
更多信息:
- 我不使用控制器资源来支持基于模型的资源(模型、表单实现
Zend_Acl_Resource_Interface
)。都有方法isAllowed()
- 我使用模块化目录和可重用模块(单独的模型、配置、路由等)
- 我的应用程序知道所有已安装的模块、控制器、动作(结构已经解析,不是实时的)
所以我正在寻找遵循这个方案的方法,并将每个模块的 ACL 分开。我不想使用应用程序资源,因为它是一种浪费 - 并不总是需要 acl。
我有一个动作助手,它仅在真正需要时才实例化模块特定的 ACL。但有时我也希望全局应用程序 ACL 可用(例如,当我想将它传递给导航视图助手或控制器插件时)。
我的模块 ACL 类只有一种方法:init()
.
我看到的肮脏解决方案是解析源类并将文件合并为新类的一种方法。
有什么建议么?