ACL类是否具有该类所有对象的权限? 或者只拥有自己的权限而不是对象? 让我解释一下Symfony2:
我有一个实体订单和5个已创建的订单。如果我授予所有者对类订单的许可,我可以授予编辑所有对象的权限吗?
$objectIdentity = new ObjectIdentity('class', 'Acme\DemoBundle\Entity\Order');
$securityIdentity = new RoleSecurityIdentity($role->getRole());
$acl = $aclProvider->createAcl($objectIdentity);
$acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER);
$aclProvider->updateAcl($acl);
修改 其实我有两个问题:
第一个问题: 我遇到的问题是当我使用RoleSecurityIdentity时。它不适合我。如果我使用UserSecurityIdentity完美地适用于每个对象。 这个例子工作正常:
foreach($orders as $order) {
$objectIdentity = ObjectIdentity::fromDomainObject($salesOrder);
$acl = $aclProvider->createAcl($objectIdentity);
$securityIdentity = new UserSecurityIdentity(
'admin',
'Acme\CoreBundle\Entity\User');
$acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER);
$aclProvider->updateAcl($acl);
}
用户管理员有OWNER授权!
此示例不起作用:
foreach($orders as $order) {
$objectIdentity = ObjectIdentity::fromDomainObject($salesOrder);
$acl = $aclProvider->createAcl($objectIdentity);
$securityIdentity = new RoleSecurityIdentity('ROLE_ADMIN');
$acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER);
$aclProvider->updateAcl($acl);
}
拥有ROLE_ADMIN的用户没有对象的授权!
第二个问题: 如果我将OWNER授权申请到类订单我没有授权来访问实体:让我解释一下:
$objectIdentity = new ObjectIdentity('class', 'Neventum\PaymentBundle\Entity\SalesOrder');
$acl = $aclProvider->createAcl($objectIdentity);
$securityIdentity = UserSecurityIdentity::fromAccount($admin);
$acl->insertClassAce($securityIdentity, MaskBuilder::MASK_OWNER);
$aclProvider->updateAcl($acl);
我需要admin用户始终可以访问Order实体的所有对象。
答案 0 :(得分:3)
我已经修好了!
问题在于用户实体上的getRoles方法。
在此之前:
function getRoles() {
return $this->roles->toArray();
}
我已改为:
function getRoles()
{
$roles = array();
foreach($this->userRoles as $userRole) {
$roles[] = $userRole->getRole();
}
return $roles;
}
如果有人知道为什么我会欣赏