dream752614590 2014-07-31 15:22
浏览 63

Symfony2的AccessDeniedHandlerInterface可自动重定向未授权用户

When implementing an AccessDeniedHandlerInterface to catch any AccessDeniedExceptions is it possible to access the role of the user in order to determine an appropriate RedirectResponse route?

I want to direct people who aren't logged in to one place, and people that are logged in but don't have the permissions to another place, instead of just getting a 403 page.

  • 写回答

1条回答 默认 最新

  • dongsi8812 2014-08-01 14:06
    关注

    One solution to the problem is to pass the SecurityContext object as an argument to the AccessDeniedHandlerInterface in the config.yml file like so.

    //config.yml
    
    kernel.listener.access_denied_listener:
        class: Path\To\Your\Class
        arguments: [@security.context]
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: handle }
    

    Doing this allows the handle() method access to the token representing the current user authentication. From this the appropriate re-routing can take place.

    namespace Path\To\Your\Class;
    
    use Symfony\Component\Security\Http\Authorization\AccessDeniedHandlerInterface;
    use Symfony\Component\Security\Core\Exception\AccessDeniedException;
    use Symfony\Component\HttpFoundation\RedirectResponse;
    use Symfony\Component\Security\Core\SecurityContext;
    use Symfony\Component\HttpFoundation\Request;
    
    class AccessDeniedListener implements AccessDeniedHandlerInterface
    {
        protected $security;
    
        public function __construct(SecurityContext $security)
        {
            $this->security = $security;
        }
    
        public function handle(Request $request, AccessDeniedException $accessDeniedException)
        {
            if ($this->security->isGranted('ROLE_USER')) {
                return new RedirectResponse('user_route');
            }
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起