6

我正在尝试了解有关 Symfony 和“超级管理员”的一些信息。

当我使用FOSUser 创建具有超级管理员权限的用户时

php app/console fos:user:create adminuser --super-admin

我首先想知道是什么意思(来自文档)

[...]指定 --super-admin 选项会将用户标记为超级管理员 [...]

我想这意味着授予ROLE_SUPER_ADMIN用户,因为我在用户表中看不到任何超级管理员字段。

其次,虽然(仍然来自文档)

超级管理员可以访问您的应用程序的任何部分

security:
    role_hierarchy:
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ...]

为什么我们还需要为它配置访问层次?

4

2 回答 2

6

查看 FOSUserBundle 的代码,您会发现如果使用标志调用CreateUserCommand将使用布尔参数调用UserManipulator--super-admin$superadmin=true

现在 UserManipulator 调用将创建一个用户对象的UserManager,调用它的setSuperAdmin()方法并在之后持久化新用户。

该方法如下所示:

public function setSuperAdmin($boolean)
{
    if (true === $boolean) {
        $this->addRole(static::ROLE_SUPER_ADMIN);
    } else {
        $this->removeRole(static::ROLE_SUPER_ADMIN);
    }

    return $this;
}

所以回答你的第一个问题:

的,该--super-admin标志会导致FOSUserBundle创建一个具有该ROLE_SUPER_ADMIN角色的新用户。

您仍然必须在安全配置中包含角色层次结构,因为该ROLE_SUPER_ADMIN角色与任何其他角色基本上没有区别。

这只是Symfony 标准版提供的约定 ,具有角色的用户不应该有任何访问限制。ROLE_SUPER_ADMIN

如果您希望ROLE_SUPER_ADMIN默认绕过所有安全投票者 - 请查看 JMSSecurityExtraBundle IddqdVoter,它为特殊角色实现了这一点ROLE_IDDQD。但这已在您的其他问题中提出

于 2013-10-30T09:54:36.820 回答
1

通过定义层次结构,您明确授予它 ROLE_ADMIN 和 ROLE_ALLOWED_TO_SWITCH 角色(或您可能拥有的其他自定义角色)

如果您评论此行,并尝试使用 ROLE_SUPER_ADMIN 用户访问带有 ROLE_ADMIN 检查的操作,您将收到不允许的错误。

ROLE_SUPER_ADMIN 只是超级管理员角色应具有的名称的约定,但它自己没有权限,您必须明确授予它。

于 2013-10-30T10:00:07.650 回答