php – 根据FOSUserBundle的角色重定向到不同的位置
我到处寻找,并尝试了一切,但我的重定向仍然不想工作.
我已经完成了this问题答案中的选项二,但是没有出现想要的结果. 这是我的覆盖登录功能(在/src/Acme/UserBundle/Controller/SecurityController.php中); class SecurityController extends BaseController { public function loginAction(Request $request) { /** @var $session SymfonyComponentHttpFoundationSessionSession */ $session = $request->getSession(); $authChecker = $this->container->get('security.authorization_checker'); $router = $this->container->get('router'); if ($authChecker->isGranted('ROLE_ADMIN')) { return new RedirectResponse($router->generate('admin_home'),307); } if ($authChecker->isGranted('ROLE_USER')) { return new RedirectResponse($router->generate('user_home'),307); } ... ... } } 我在/ src / Acme / UserBundle /中包含我的AcmeUserBundle.php,其中包含以下代码; namespace AcmeUserBundle; use SymfonyComponentHttpKernelBundleBundle; class AcmeUserBundle extends Bundle { public function getParent() { return 'FOSUserBundle'; } } 然后我的主应用程序捆绑了AppBundle,旁边是Acme里面的/ src /,我的DefaultController.php在/ Controller /里面,我的管理员控制器是DefaultController.php里面的/ Controller / Admin / 当我与角色为ROLE_USER的用户登录时,它会转到正确的位置.但是当我使用角色ROLE_ADMIN登录时,他会转到与ROLE_USER相同的位置.假设要转到管理页面. 这是我的security.yml文件; security: encoders: FOSUserBundleModelUserInterface: bcrypt role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN providers: fos_userbundle: id: fos_user.user_provider.username firewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager logout: true anonymous: true access_control: - { path: ^/login$,role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/register,role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting,role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/,role: ROLE_USER } - { path: ^/admin,role: ROLE_ADMIN } 在我的项目的分析器中,正常注册的用户状态ROLE_USER的用户角色.我将用户在我的数据库中的角色修改为ROLE_ADMIN,当我与他一起登录时,两个角色都显示为分配给他.在我的数据库中的角色列下,它是如何查找分配给他的ROLE_USER的用户:
这就是我修改其他用户使用ROLE_ADMIN的方法:
这是正确的吗?有人可以帮我解决这个问题吗? 注意:当我使用ROLE_USER用户登录并修改url以转至/ admin /时,我将获得“表达式”has_role(‘ROLE_ADMIN’)“拒绝访问”.错误.我明白了,这很好,因为我不希望普通用户访问该区域.但是,当我使用ROLE_ADMIN用户登录并将URL修改为/ admin /时,它会转到该页面,因此我可以看到我的ROLES工作正常并且路由也是如此,但登录时的重定向不是. 清除我的缓存也没有做到这一点. 解决方法
在form_login(至少)中有一个鲜为人知的success_handler选项,在这里你可以找到一个完美适合你需求的
gist with example usage.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |