同时检查ACL类的范围和对象范围

时间:2012-12-05 14:00:33

标签: symfony acl

我想使用访问控制列表在Symfony2中建模我的访问控制。用户具有允许类范围访问的不同角色,但它们也可以具有对象范围访问权限。默认示例:admin role可以编辑所有注释,用户可以编辑自己的注释。

现在问题是检查权限:目前只检查类或对象范围:

$securityContext->isGranted('EDIT', $identity)

其中identity

new ObjectIdentity('class', 'Acme\\BlogBundle\\Document\\Comment')

comment对象本身。

我认为选民会检查类范围和对象范围访问,这是基于comment对象显然提供了自己的类这一事实。现在我将如何实现这一目标?创建自定义选民?还是我完全错过了其他的东西?

E: 文档说:“PermissionGrantingStrategy首先检查所有对象范围的ACE,如果没有适用,将检查类范围的ACE”:http://symfony.com/doc/current/cookbook/security/acl_advanced.html

因此,显然意味着如果存在对象范围,则根本不考虑类范围。 :(

1 个答案:

答案 0 :(得分:2)

好吧,创建一个类范围,我应该使用

$acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER);

而不是->insertObjectAce(...

这使得它在标准的MySQL实现中工作,但是IamPersistent / MongoDBAclBundle有一个错误,即acl_entry和类范围acl_oid之间没有链接,这导致类范围在投票期间永远不会出现在$ acl中。