我在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。
在数据库中,roles字段包含:
a:1:{i:0;s:13:"ROLE_RETAILER";}
我需要摆脱那个ROLE_USER,或者我必须重写访问控制列表并修改某些控制器的代码。
答案 0 :(得分:4)
如果你正在使用FOSUserBundle,所有用户都默认授予ROLE_USER,即使它没有存储在数据库中。
有关FOSUserBundle如何分配角色的详细信息,请参阅this answer。
答案 1 :(得分:0)
除非你需要它的所有功能,否则恕我直言FOSUserBundle可能会有点矫枉过正。
根据这里的文件 http://symfony.com/doc/current/security.html
1)初始security.yml设置(身份验证)
# 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);
}