【发布时间】:2013-06-12 02:46:22
【问题描述】:
我正在编写一个从“setter”方法中获取规则的 ACL 类:
<?php
$acl = new AccessControlList();
$acl->allow('someController', 'publicAction', 'guestRole');
$acl->deny('someController', 'privateAction', 'guestRole');
问题是:将这些规则存储在 ACL 对象中的最佳选择是什么?
目前,我正在考虑这样的数组:
array(
'guest' => array(
'someController' => array(
'publicAction' => true,
'privateAction' => false
)
),
'admin' => array (
...
)
)
但是当它增长时它看起来会是性能灾难,记住读取数组(推断isAllowed(...)结果)和写入它的逻辑(规则冲突,覆盖,角色和资源之间的继承.. .).
也许我从一开始就错了,那些“二传手”就是问题所在。 是否有任何完善的设计模式可供遵循?
【问题讨论】:
-
你看过
zend_acl吗?可能会给你一些见解 -
延迟加载 ACL 规则。
-
@AlexP 实际上我的实现是
zend_acl的简约版本(如果我真的理解它是如何工作的)。问题是我认为所有的简化都会为那个凌乱的数组付出代价。 -
@Orangepill,听起来不错,能激发答案吗?
标签: php design-patterns acl