2

ACL 类对该类的所有对象都有权限吗?还是只对自己有权限而不对对象有权限?让我解释一下 Symfony2:

我有一个实体订单和 5 个创建的订单。如果我向 Order 类授予所有者权限,我有权编辑所有对象吗?

$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 授予类 Order 我没有授予访问实体的权限:让我解释一下:

    $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);

我需要管理员用户始终可以访问 Order 实体的所有对象。

4

1 回答 1

3

我已经修好了!

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

之前是这样的:

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

我已更改为:

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

如果有人知道我为什么会感激

于 2012-09-05T07:59:45.673 回答