Symfony - 了解超级管理员

Pie*_*NAY 5 security symfony fosuserbundle

我想了解一些关于Symfony和"超级管理员"的事情.

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

php app/console fos:user:create adminuser --super-admin
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

security:
    role_hierarchy:
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ...]
Run Code Online (Sandbox Code Playgroud)

为什么我们仍然需要为它配置访问层次结构?

Nic*_*ich 6

查看 FOSUserBundle 的代码,您会发现如果使用标志调用CreateUserCommand--super-admin将使用布尔参数调用UserManipulator$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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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