Zend Acl:使用数据库进行持久化,是否更好地序列化acl对象或使用特殊模式?

时间:2010-12-29 19:26:36

标签: php zend-framework symfony1 acl

我需要实现Zend_Acl组件。我在文档中读到可以使用PHP的序列化函数序列化Zend_Acl对象。我的应用程序将拥有许多角色,规则和资源。我需要创建一个后端来配置所有这些东西。

我的问题是:在这种情况下,序列化ACL对象是否更好,或者最好创建一个模式来在三个不同的表中保留角色,规则和资源?我的猜测是第一个选项,因为Zend_Acl组件已经有了添加/删除规则的方法,它自己处理每种类型对象的继承,并且它有可能查询ACL。但是我希望听到之前遇到过这种情况的人的意见,所以我不会在没有问的情况下做出错误决定:)

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要首先创建架构,无论它有多大或多复杂,然后通过扩展类,覆盖Zend_Aclallow()方法来实现deny()并将您的CRUD用于其中包含权限架构,然后分别将调用传递给parent::allow()parent::deny()

构建ACL需要时间,但您可以使用Zend_Cache对其进行缓存。使用此方法,您的ACL将与您的架构保持同步。

答案 1 :(得分:2)

我认为这主要是哪个选项更适合您需要的问题。

我认为主要考虑因素如下:

  • ACL大小:非常大的ACL可能不会非常快速地序列化/反序列化,并且它通常可能会运行得更慢。
  • ACL修改:您是否需要能够对ACL执行更复杂的修改,而不仅仅是添加和删除规则

对于大型ACL,具有特定架构是更好的选择。这将允许您轻松构建仅适用于当前使用情况的特定规则的ACL。这样,您可以限制ACL的大小,并获得更好的性能。

如果有一个小ACL,序列化通常可以很好地工作。

如果您需要对ACL进行更复杂的更改,您可能还需要考虑为其使用特定的架构。这样,您可以更轻松地查询所有规则,并显示它们供用户编辑。

(关于尺寸/性能部分:您可能只需剖析并查看是否存在性能问题以确定最佳选择)