我正在编写一个从“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(...)
结果)和写入数组的逻辑(规则冲突、覆盖、角色和资源之间的继承......)。
也许我从一开始就错了,那些“二传手”就是问题所在。是否有任何完善的设计模式可以遵循?