【问题标题】:Symfony redirect to specific page with security annotationSymfony 重定向到带有安全注释的特定页面
【发布时间】:2018-03-06 21:14:26
【问题描述】:

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

/**
    * @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) {
...

这是带有安全注释的操作,我正在考虑在它之后添加一个 redirect 到此页面:

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

【问题讨论】:

  • 您可以使用 'access_control'(security.yml) 而不是为控制器中的每个功能添加注释,您将拥有更多控制权,您可以将所有被拒绝的请求重定向到另一个页面(例如登录页面) symfony.com/doc/2.8/security/access_control.html
  • 我读过关于这样做的信息。但是我的项目中有不同的捆绑包,我不希望所有 access_denied 事件都重定向到同一页面,而是重定向到捆绑包中的特定页面..对此有什么想法吗?@rescobar

标签: symfony security redirect annotations


【解决方案1】:

Symfony 中有一个例子。不要忘记定义服务。

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

【讨论】:

  • 感谢您的链接! :) 我已经通读了文档,但我还不知道如何在拒绝访问处理程序中编写代码。正如我所说,它不是针对整个项目,而只是针对其中的一个特定 Bundle,所以我想获得一个特定的重定向到文档的视图页面..
【解决方案2】:

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

【讨论】:

  • 谢谢@isom,我只是不想为我的整个项目指定拒绝访问的页面,而只是在特定的捆绑包中重定向以进行编辑/查看操作,所以我不认为,编辑我的 error.403 模板将帮助我解决我的问题.. 还有其他想法吗?
  • 你可以在你的action中试试这个if($this->container->get('security.context')->isGranted('ROLE_ADMIN')){ //执行一些php代码 } else { $this->render('yourTemplate.html.twig') }
【解决方案3】:

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

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

因此,您可以为您的专有状态代码添加自定义错误页面。不过还没有测试过,只是一个想法。

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 2020-07-26
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多