有没有最简单的方法允许具有特定条件的用户查看页面?

时间:2017-07-24 10:04:18

标签: symfony

目前,有一个带有安全性的结帐页面如下。

/**
 * @Route("/checkout")
 * @Security("has_role('ROLE_ADMIN')")
 */

现在所有管理员都可以查看此页面,我希望允许具有特定条件的用户与所有管理员一起访问此页面。

我可以通过删除安全性并在每个操作中添加条件来实现此目的。

是否有任何Symfony方法可以轻松处理这个问题?

2 个答案:

答案 0 :(得分:0)

你有很多可能性:

  1. @Security并执行以下操作:

    /**
     * @Route("/{id}/edit", name="admin_post_edit")
     * @Security("user.getEmail() == post.getAuthorEmail()")
    */
    public function editAction(Post $post)
    {
        // ...
    }
    
  2. 注意,您始终可以访问用户,并且您还可以访问post实体,因为您拥有Post $post。有时候,你需要@ParamConverter来。

    1. 只是做一个条件,如果是的话:throw $this->createAccessDeniedException('You cannot access this page!');

    2. 对于更复杂的控件,您可以使用选民(https://symfony.com/doc/current/security/voters.html

    3. 对于非常复杂的控件:ACL(https://symfony.com/doc/current/security/acl.html

答案 1 :(得分:0)

您可以创建自己的自定义函数,以便授予访问权限,然后从注释中调用它。该功能可能类似于

return hasRole('ROLE_ADMIN') || anotherCondition();

在此处查看更多信息 https://symfony.com/doc/current/best_practices/security.html#security-voters