Symfony重定向到具有安全注释的特定页面

时间:2017-09-25 19:44:55

标签: symfony security redirect annotations

我有一个控制器操作,只有在用户具有相应角色时才能访问该操作。 它在尝试访问应用程序时已经工作并拒绝访问,但是当我在Web浏览器的搜索栏中手动操作路径时,仍然可以访问它。因此,我将@Security注释添加到该操作,但不是拒绝访问消息,而是要重新路由/重定向到另一个页面。我怎么能这样做?

/**
    * @Security("has_role('ROLE_DOCUMENT_EDIT')")
    * @Route("/document/edit/{id}", name="documentBundle_edit", requirements={"id" = "\d+"}, defaults={"id" = 0})
    */
    public function editAction(Request $request, $id) {
...

带有安全注释的操作,我正在考虑在此页面后面添加重定向

      /**
    * @Route("/document/view/{id}", name="documentBundle_view_document", requirements={"id" = "\d+"}, defaults={"id" = 0})
    */
    public function viewAction(Request $request, $id) {
...

3 个答案:

答案 0 :(得分:0)

Symfony中提供了一个示例。不要忘记定义服务。

https://symfony.com/doc/3.4/security/access_denied_handler.html

答案 1 :(得分:0)

您必须尊重此树,并且可以在error.403.html.twig页面中个性化您的访问被拒绝的例外视图。 (仅限生产模式)

enter image description here

答案 2 :(得分:0)

SensioFrameworkExtraBundle可以添加statusCodeOption,如here所述。

/**
* @Security("is_granted('ROLE_DOCUMENT_EDIT')", statusCode=901)
*/
public function editAction(Request $request, $id)
{
}

因此,您可以为自己的专有状态代码添加自定义错误页面。但是,Haven没有对它进行过测试,只是一个想法。