Symfony 2 - 在 ROLE_USER 下添加用户角色

问题描述 投票:0回答:3

我正在尝试在 Symfony 2 中的默认 USER_ROLE 下创建一个新角色(该角色对某些功能的写访问权限有限)。我正在使用 FOSUserBundle。

到目前为止我已经编写了以下安全设置,但我的 ROLE_DEMO 用户仍然获得 ROLE_USER。

role_hierarchy:
        ROLE_DEMO:        []
        ROLE_USER:        [ROLE_DEMO]
        ROLE_ADMIN:       [ROLE_USER, ROLE_SONATA_ADMIN]
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

是否可以在 Symfony 2 中的 ROLE_USER 下创建角色。如果可以,如何创建?

php symfony roles fosuserbundle
3个回答
4
投票

我想出的一个更短的解决方案是覆盖我的所有者

const ROLE_DEFAULT
类开头的
User

class User extends BaseUser
{
    /** 
     * Override FOSUserBundle User base class default role.
     */
    const ROLE_DEFAULT = 'ROLE_DEMO';

    [...]
}

这样我什至不必重写 FOS 用户包

getRoles()
方法。


4
投票

如果您使用 FOSUserBundle,它将默认为所有用户提供

ROLE_USER
ROLE_USER
存在于默认 FOSUserBundle 设置下的每个水合用户上(尽管不在数据库中)。您可以通过在自己的
getRoles()
类上定义自己的
User
方法来覆盖该实现。或者将默认角色更改为
ROLE_NONE
(什么并不重要)。或者只是避免使用
ROLE_USER
并为实际用户想出另一个角色名称。

这是默认的

User
实现

/* FOS\UserBundle\Model\User */
...
public function getRoles()
{
    $roles = $this->roles;

    foreach ($this->getGroups() as $group) {
        $roles = array_merge($roles, $group->getRoles());
    }

    // we need to make sure to have at least one role
    $roles[] = static::ROLE_DEFAULT;

    return array_unique($roles);
}

1
投票

适用于 symfony 3 和 4

在您的实体用户中使用它

public function getRoles(): array
{
    $roles = $this->roles;
    // guarantee every user at least has ROLE_USER
    $roles[] = 'ROLE_USER';

    return array_unique($roles);
}
© www.soinside.com 2019 - 2024. All rights reserved.