Symfony2默认授予de ROLE_USER吗?

时间:2017-03-21 09:51:40

标签: symfony fosuserbundle

我在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";}

检查已记录用户的探查器显示: granted roles

我需要摆脱那个ROLE_USER,或者我必须重写访问控制列表并修改某些控制器的代码。

2 个答案:

答案 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);
}