我有一个Order实体,它有一个买方(用户实体)和一个卖方(用户实体)。
我希望这个订单只能由2个用户(买家和卖家)通过Symfony2 ACL查看。
我做了很多测试但没有成功。请帮忙 ! 这是下面的脚本:
// creating the ACL
$aclProvider = $this->get('security.acl.provider');
$objectIdentity = ObjectIdentity::fromDomainObject($order);
try {
$acl = $aclProvider->findAcl($objectIdentity);
} catch(\Symfony\Component\Security\Acl\Exception\AclNotFoundException $e) {
$acl = $aclProvider->createAcl($objectIdentity);
}
// mask builder permissions
$maskBuilder = new MaskBuilder();
$maskBuilder->add('view')
->add('edit');
$mask = $maskBuilder->get();
// security identity for the seller
$securityIdentitySeller = new UserSecurityIdentity($order->getSeller(), "ACMEUserBundle\Entity\User");
$acl->insertObjectAce($securityIdentitySeller, $mask);
// security identity for the buyer
$securityIdentityBuyer = new UserSecurityIdentity($order->getBuyer(), "ACMEUserBundle\Entity\User");
$acl->insertObjectAce($securityIdentityBuyer, MaskBuilder::MASK_OWNER);
// update the acl
$aclProvider->updateAcl($acl);
=============================================== ========================= 不幸的是,这个脚本在同一个用户(订单卖家)的数据库中创建了两个ACE
答案 0 :(得分:0)
您的情况听起来几乎与Symfony Cookbook section on ACL中提供的示例完全相同。这个例子是关于一个博客,除了博客本人之外,只想在他博客上发表评论的作者能够编辑他或她自己的评论。其他评论者不应该能够编辑其他评论者的评论。此示例与您的情况之间唯一真正的区别是编辑权限与查看权限。一旦您需要过滤ACL,您可以通过多种方式处理详细信息,详见食谱。