我想了解一些关于Symfony和“超级管理员”的东西。
当我使用具有超级管理权限的创建用户的FOSUser时
php app/console fos:user:create adminuser --super-admin我首先想知道(从医生那里)什么意思。
...Specifying的-超级管理选项将标记用户为超级管理员.
我认为这意味着将ROLE_SUPER_ADMIN授予用户,因为我在user表中没有看到任何超级管理字段。
第二,当(从医生那里)
超级管理员可以访问应用程序的任何部分。
security:
role_hierarchy:
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ...]为什么我们仍然需要为它配置访问层次结构?
发布于 2013-10-30 09:54:36
查看FOSUserBundle的代码,您会发现,如果使用CreateUserCommand标志调用--super-admin,将使用布尔参数$superadmin=true调用UserManipulator。
现在,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-30 10:00:07
通过定义层次结构,可以显式地授予它ROLE_ADMIN和ROLE_ALLOWED_TO_SWITCH角色(或其他您可以拥有的自定义角色)。
如果您注释这一行,并且尝试与您的ROLE_SUPER_ADMIN用户一起访问带有ROLE_ADMIN检查的操作,您将得到一个不允许的错误。
ROLE_SUPER_ADMIN只是超级管理员角色应该拥有的名称的约定,但是它没有自己的特权,您必须显式地将它们授予它。
https://stackoverflow.com/questions/19677807
复制相似问题