加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 根据FOSUserBundle的角色重定向到不同的位置

发布时间:2020-12-13 16:59:46 所属栏目:PHP教程 来源:网络整理
导读:我到处寻找,并尝试了一切,但我的重定向仍然不想工作. 我已经完成了this问题答案中的选项二,但是没有出现想要的结果. 这是我的覆盖登录功能(在/src/Acme/UserBundle/Controller/SecurityController.php中); class SecurityController extends BaseController{
我到处寻找,并尝试了一切,但我的重定向仍然不想工作.

我已经完成了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的用户:

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工作正常并且路由也是如此,但登录时的重定向不是.

清除我的缓存也没有做到这一点.

解决方法

在form_login(至少)中有一个鲜为人知的success_handler选项,在这里你可以找到一个完美适合你需求的 gist with example usage.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读