许多用户的{symfony2 ACL}

时间:2016-03-03 16:46:57

标签: symfony security acl

我有一个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

1 个答案:

答案 0 :(得分:0)

您的情况听起来几乎与Symfony Cookbook section on ACL中提供的示例完全相同。这个例子是关于一个博客,除了博客本人之外,只想在他博客上发表评论的作者能够编辑他或她自己的评论。其他评论者不应该能够编辑其他评论者的评论。此示例与您的情况之间唯一真正的区别是编辑权限与查看权限。一旦您需要过滤ACL,您可以通过多种方式处理详细信息,详见食谱。