繁体   English   中英

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

[英]Symfony 2 - Adding user roles under the ROLE_USER

我正在尝试在默认的USER_ROLE下面的Symfony 2中创建一个新角色(该角色对某些功能的写访问权限有限)。 我正在使用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下创建一个角色。如果是,怎么做?

如果您使用的是ROLE_USER ,默认情况下它将为所有用户提供ROLE_USER ROLE_USER存在于默认FOSUserBundle设置下的每个单水合用户(尽管不是在数据库中)。 您可以通过在自己的User类上定义自己的getRoles()方法来覆盖该实现。 或者将默认角色更改为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);
}

我想出的更简单的解决方案是在我的所有者User类的开头覆盖const ROLE_DEFAULT

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

    [...]
}

这样我甚至不必覆盖FOS用户包getRoles()方法。

对于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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM