什么是Zend Acl的首选实施方法

时间:2011-11-18 13:55:12

标签: singleton zend-acl zend-framework

在Zend Framework 1.X中,以下哪种方法更好?为什么? 的方法-1:
创建一个扩展Zend_Acl的(子)类,并使用is来管理所有的Acl。它允许我们使用$ this对象使用所有Zend_Acl特性/函数。

方法-2:
创建一个包含Zend_Acl对象并对该对象执行操作的自定义类。在这里,我们可以创建包装器函数,并可以控制对Zend_Acl基本函数的访问,并仅使用少数功能。

Singleton模式也可以用于这两种方法,以确保在整个站点中使用相同的Zend_Acl。

我将寻找一种方法,以后我可以轻松地移植到ZF-2.0。如果有任何其他方法,请提及它,我会相应更新帖子。

更新:还有其他方法可以在整个网站上维护单个Zend_Acl对象吗?你怎么看待使用带有方法1的单例并使用自定义方法,这将为我们提供Zend_Acl的所有预定义方法以及我们的自定义包装器。

2 个答案:

答案 0 :(得分:3)

  

我将寻找一种方法,以后我可以轻松地移植到ZF-2.0。如果有任何其他方法,请提及它,我会相应更新帖子。

这句话强烈赞成方法2,因为您的包装器充当ACL实现的适配器,并且您的应用程序仅与您的适配器交互,而不是直接与Zend_Acl交互。因此,您可以稍后将具体实现(即Zend_Acl的组合)更改为另一个,无论是Zend\Acl还是Symfony 2组件或您自己编写的内容。

答案 1 :(得分:0)

在我的项目中,我使用模型来管理整个ACL系统(添加资源,添加角色等)。显然这个类扩展了Zend_Acl。此外,我使用一个使用preDispatch方法的插件来检查发出请求的用户是否被允许访问请求的URL。