我已经完成了this问题答案中的选项二,但是没有出现想要的结果.
这是我的覆盖登录功能(在/src/Acme/UserBundle/Controller/SecurityController.php中);
class SecurityController extends BaseController { public function loginAction(Request $request) { /** @var $session \Symfony\Component\HttpFoundation\Session\Session */ $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 Acme\UserBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; 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: FOS\UserBundle\Model\UserInterface: 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的用户:
a:0:{}
这就是我修改其他用户使用ROLE_ADMIN的方法:
a:1:{i:0;s:10:”ROLE_ADMIN”;}
这是正确的吗?有人可以帮我解决这个问题吗?
注意:当我使用ROLE_USER用户登录并修改url以转至/ admin /时,我将获得“表达式”has_role(‘ROLE_ADMIN’)“拒绝访问”.错误.我明白了,这很好,因为我不希望普通用户访问该区域.但是,当我使用ROLE_ADMIN用户登录并将URL修改为/ admin /时,它会转到该页面,因此我可以看到我的ROLES工作正常并且路由也是如此,但登录时的重定向不是.
清除我的缓存也没有做到这一点.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。