Symfony2 默认授予 de ROLE_USER 吗?

Does Symfony2 grants de ROLE_USER by default?

我在 security.yml 中的角色层次结构是这样的:

role_hierarchy:
    ROLE_API:         ROLE_USER
    ROLE_SUPERVISOR:  ROLE_USER
    ROLE_DIRECTOR:    ROLE_SUPERVISOR
    ROLE_SUPER_ADMIN: [ROLE_DIRECTOR, ROLE_API]

我正在添加一个名为 ROLE_RETAILER 的新角色,它没有继承。所以我没有把它放在 role_hierarchy 部分。

当我使用只有 ROLE_RETAILER 的用户登录时,也会授予 ROLE_USER。

在数据库中,角色字段包含:

a:1:{i:0;s:13:"ROLE_RETAILER";}

并检查已登录用户的分析器显示:

我需要摆脱那个 ROLE_USER,否则我将不得不重写访问控制列表并修改某些控制器的代码。

如果您使用的是 FOSUserBundle,所有用户都默认授予 ROLE_USER,即使它没有存储在数据库中。

有关 FOSUserBundle 如何分配角色的详细信息,请参阅

除非您需要它的所有功能,否则恕我直言,FOSUserBundle 可能有点矫枉过正。

根据此处的文档 http://symfony.com/doc/current/security.html

1) Initial security.yml Setup (Authentication)

# app/config/security.yml
security:
    providers:
        in_memory:
            memory: ~

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        default:
            anonymous: ~

默认设置匿名

否则,您可能需要在此处查看本教程

https://knpuniversity.com/screencast/symfony2-ep2/roles-disabling-user

关于设置您自己的默认角色处理

public function getRoles()
{
    return $this->roles;
}

public function setRoles(array $roles)
{
    $this->roles = $roles;

    // allows for chaining
    return $this;
}
public function getRoles()
{
    $roles = $this->roles;
    $roles[] = 'ROLE_RETAILER';

    return array_unique($roles);
}