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

編集 実際に私は2つの問題があります:

最初の問題: 私が抱えている問題は、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を持つユーザーには、オブジェクトへの権限がありません。

2番目の問題: クラスOrderに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);

管理者ユーザーが常にOrderエンティティのすべてのオブジェクトにアクセスできる必要があります。

4

1 に答える 1

3

修正しました!

問題は、User Entity の 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 に答える