我的应用程序具有以下角色层次结构:
- ROLE_SUPER_ADMIN
- ROLE_ADMIN
- ROLE_USER
我有我的控制器使这项工作:
/**
* @Route("/admin/delete/{id}", name="_admin_delete")
* @Secure(roles="ROLE_ADMIN")
*/
public function deleteuserAction($id)
{
$user = $this->container->get('fos_user.user_manager')->findUserBy(array('id' => $id));
if (null === $user) {
throw $this->createNotFoundException('User id not found');
}
if ($user->hasRole('ROLE_ADMIN')) {
// You can not delete this user!
throw new ...
}
// delete user
$this->container->get('fos_user.user_manager')->deleteUser($user);
// ...
}
所有具有 ROLE_ADMIN 的人都可以访问 deleteuserAction .. 但我希望他们不能删除具有角色ROLE_ADMIN
或HIGHER的用户。
有正确的方法可以做到这一点吗?
使用此配置,您可以删除ROLE_SUPER_ADMIN
...是的,您可以将其添加到列表中以阻止它,但复杂的层次结构可能会变得难以管理。