以下哪一种方法更好,为什么?
方法1:
创建一个扩展Zend_Acl的(子)类,并使用它来管理所有Acl。它将允许我们使用$this对象来使用所有的Zend_Acl特性/函数。
方法2:
创建一个包含Zend_Acl对象的自定义类,并对该对象执行操作。在这里,我们可以创建包装器函数,可以控制对Zend_Acl基本函数的访问,并且只使用少数几个特性。
单例模式也可以用于这两种方法,以确保在整个站点中使用相同的Zend_Acl。
我将寻找一种方法,我可以稍后轻松地移植到ZF-2.0。如果有任何其他方法,请提出来,我将相应地更新帖子。
Update:在整个站点中,除了单例之外,还有其他方法来维护单个Zend_Acl对象吗?您认为使用方法-1的单例并使用自定义方法如何?这将为我们提供Zend_Acl的所有预定义方法以及我们的自定义包装器。
我将寻找一种方法,我可以稍后轻松地移植到ZF-2.0。如果有任何其他方法,请提出来,我将相应地更新帖子。
此注释强烈支持方法2,因为您的包装器充当ACL实现的适配器,并且您的应用程序仅与适配器交互,而不是直接与Zend_Acl
交互。因此,您可以稍后更改特定的实现(即Zend_Acl
的组合)到另一个,无论是ZendAcl
或Symfony 2组件或您自己编写的东西。
在我的项目中,我使用Model来管理整个ACL系统(添加资源、添加角色等)。显然,这个类扩展了Zend_Acl。此外,我使用一个插件,使用preDispatch方法,检查用户谁提出的请求是否被允许访问所请求的url。