目前,有一个带有安全性的结帐页面如下。
/**
* @Route("/checkout")
* @Security("has_role('ROLE_ADMIN')")
*/
现在所有管理员都可以查看此页面,我希望允许具有特定条件的用户与所有管理员一起访问此页面。
我可以通过删除安全性并在每个操作中添加条件来实现此目的。
是否有任何Symfony方法可以轻松处理这个问题?
答案 0 :(得分:0)
你有很多可能性:
@Security并执行以下操作:
/**
* @Route("/{id}/edit", name="admin_post_edit")
* @Security("user.getEmail() == post.getAuthorEmail()")
*/
public function editAction(Post $post)
{
// ...
}
注意,您始终可以访问用户,并且您还可以访问post
实体,因为您拥有Post $post
。有时候,你需要@ParamConverter来。
只是做一个条件,如果是的话:throw $this->createAccessDeniedException('You cannot access this page!');
对于更复杂的控件,您可以使用选民(https://symfony.com/doc/current/security/voters.html)
对于非常复杂的控件: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