登录后无法访问FOSUserBundle管理区域

nee*_*raj 0 login admin symfony fosuserbundle

我正在使用FOSUserBundle作为管理部分以及前端,遵循以下指令:

https://github.com/FriendsOfSymfony/FOSUserBundle/issues/849
Run Code Online (Sandbox Code Playgroud)

对于前端一切正常,但对于管理部分,当我访问我的管理区域/admin 然后我被重定向到登录页面/admin/login(这是正确的).一旦我提供管理员用户名和密码,然后根据登录后的默认目标路径

default_target_path: /admin/
Run Code Online (Sandbox Code Playgroud)

在security.yml中定义它重定向到/admin(也是正确的)但我得到403禁止错误

**Access Denied**
403 Forbidden - AccessDeniedHttpException
1 linked Exception:
    AccessDeniedException     
Run Code Online (Sandbox Code Playgroud)

在我的security.yml中,当我删除以下行:

- { path: ^/admin/, role: ROLE_ADMIN }
Run Code Online (Sandbox Code Playgroud)

然后我可以在登录后访问/管理区域.

我还观察到,每当我/register在前端创建一个新用户时,它都会进入fos_user数据库表a:0:{}角色字段.现在我想知道:

我需要在脚本级别进行哪些更改才能创建不同类型的用户,例如admin,普通用户等,以便我删除的上述security.yml代码可以在不删除的情况下工作

NHG*_*NHG 7

默认情况下,创建的用户具有ROLE_USER保存在DB中的角色,就像转换为JSON的空数组一样a:0:{}.在FOSUserBundle中存在一些有用的命令行工具.你应该使用像这样的set用户升级用户ROLE_ADMIN:

$ php app/console fos:user:promote username ROLE_ADMIN
Run Code Online (Sandbox Code Playgroud)

之后,您的username用户将可以访问管理面板,您可以在其中手动宣传其他用户.

要创建具有不同ROLE类型的用户,您应该为fos_user.registration.initialize(或甚至fos_user.registration.success)事件编写事件侦听器,如下所示:

class RegistrationListener
{
    public function setUserRole(UserEvent $event)
    {
        $request = $event->getRequest();
        if (/* some conditions */) {
            $user = $event->getUser();
            $user->addRole('ROLE_STH');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此监听器进行设置时请小心ROLE_ADMIN.提升用户命令旨在添加类似的角色ROLE_ADMIN.