我想使用访问控制列表在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
因此,显然意味着如果存在对象范围,则根本不考虑类范围。 :(
答案 0 :(得分:2)
好吧,创建一个类范围,我应该使用
$acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER);
而不是->insertObjectAce(...
这使得它在标准的MySQL实现中工作,但是IamPersistent / MongoDBAclBundle有一个错误,即acl_entry和类范围acl_oid之间没有链接,这导致类范围在投票期间永远不会出现在$ acl中。