如何在模拟前获取用户角色?
How to get user roles before impersonation?
我正在尝试构建一个系统,允许某些用户组切换到一定数量的用户,而管理员组可以切换到任何用户。我的用户管理器由 FOSUserBundle
提供 我已经设置了安全选民来实现这一点,以便在切换发生后检查用户角色。我创建了一个名为 'IMPERSONATION'
的新选民属性,并在用户切换后 运行 的主(主页)控制器的第一行调用了 denyAccessUnlessGranted
。
在我的投票器中,我首先获取模拟用户和模拟用户的用户对象。我尝试通过执行以下操作来获取模拟用户(如 here 所述)。
foreach ($tokenStorage->getToken()->getRoles() as $role) {
if ($role instanceof SwitchUserRole) {
$impersonatorUser = $role->getSource()->getUser();
break;
}
然后,如果 $impersonatorUser
是超级管理员,我想 return true(授予访问权限):
if ($impersonatorUser->isSuperAdmin()) { return true; }
// ..
// ... other voter logic
但是,当我尝试将用户从具有 ROLE_SUPER_ADMIN
角色的用户切换到具有非管理员角色的用户时,此行永远不会执行。当我做一个var_dump
的时候,发现$impersonatorUser->isSuperAdmin()
return是false,而$impersonatorUser->getRoles
显示用户只有ROLE_USER
这个角色。由于此行之后的逻辑 return 为假,投票者拒绝访问并且切换导致访问被拒绝错误。
用户似乎在切换后失去了 ROLE_SUPER_ADMIN
角色。这是 FosUserBundle 的错误吗?
我的角色层级设置如下:
role_hierarchy:
ROLE_ADMIN: ROLE_MENTOR
ROLE_SUPER_ADMIN: ROLE_ADMIN
用户切换选项设置如下:
switch_user: { role: ROLE_MENTOR }
如何在切换前检查用户的角色,以便控制谁可以切换用户?
FOSUserBundle只提供用户管理系统,与Symfony Security和权限管理无关
如果您使用 symfony 切换用户功能来模拟用户,那么您将对您的模拟用户拥有一个额外的角色 ROLE_PREVIOUS_ADMIN
,可以检查 (see documentation)
我不知道实现您的功能的最佳解决方案,但也许这会有所帮助 (Allow switching/impersonating only to particular users in Symfony2)
我正在尝试构建一个系统,允许某些用户组切换到一定数量的用户,而管理员组可以切换到任何用户。我的用户管理器由 FOSUserBundle
提供 我已经设置了安全选民来实现这一点,以便在切换发生后检查用户角色。我创建了一个名为 'IMPERSONATION'
的新选民属性,并在用户切换后 运行 的主(主页)控制器的第一行调用了 denyAccessUnlessGranted
。
在我的投票器中,我首先获取模拟用户和模拟用户的用户对象。我尝试通过执行以下操作来获取模拟用户(如 here 所述)。
foreach ($tokenStorage->getToken()->getRoles() as $role) {
if ($role instanceof SwitchUserRole) {
$impersonatorUser = $role->getSource()->getUser();
break;
}
然后,如果 $impersonatorUser
是超级管理员,我想 return true(授予访问权限):
if ($impersonatorUser->isSuperAdmin()) { return true; }
// ..
// ... other voter logic
但是,当我尝试将用户从具有 ROLE_SUPER_ADMIN
角色的用户切换到具有非管理员角色的用户时,此行永远不会执行。当我做一个var_dump
的时候,发现$impersonatorUser->isSuperAdmin()
return是false,而$impersonatorUser->getRoles
显示用户只有ROLE_USER
这个角色。由于此行之后的逻辑 return 为假,投票者拒绝访问并且切换导致访问被拒绝错误。
用户似乎在切换后失去了 ROLE_SUPER_ADMIN
角色。这是 FosUserBundle 的错误吗?
我的角色层级设置如下:
role_hierarchy:
ROLE_ADMIN: ROLE_MENTOR
ROLE_SUPER_ADMIN: ROLE_ADMIN
用户切换选项设置如下:
switch_user: { role: ROLE_MENTOR }
如何在切换前检查用户的角色,以便控制谁可以切换用户?
FOSUserBundle只提供用户管理系统,与Symfony Security和权限管理无关
如果您使用 symfony 切换用户功能来模拟用户,那么您将对您的模拟用户拥有一个额外的角色 ROLE_PREVIOUS_ADMIN
,可以检查 (see documentation)
我不知道实现您的功能的最佳解决方案,但也许这会有所帮助 (Allow switching/impersonating only to particular users in Symfony2)