Symfony2:ClassACE和ObjectACE

时间:2012-09-04 09:01:10

标签: php symfony acl

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实体的所有对象。

1 个答案:

答案 0 :(得分:3)

我已经修好了!

问题在于用户实体上的getRoles方法。

在此之前:

function getRoles() {
    return $this->roles->toArray();
}

我已改为:

function getRoles()
{
    $roles = array();
    foreach($this->userRoles as $userRole) {
        $roles[] = $userRole->getRole();
    }
    return $roles;
}

如果有人知道为什么我会欣赏