2

我的应用程序具有以下角色层次结构:

  • 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_ADMINHIGHER的用户。

有正确的方法可以做到这一点吗?

使用此配置,您可以删除ROLE_SUPER_ADMIN...是的,您可以将其添加到列表中以阻止它,但复杂的层次结构可能会变得难以管理。

4

1 回答 1

1

如果您不想使用 ACL,另一种选择是创建一个自定义投票器来处理您的层次结构。这里描述了一个基本的选民:http: //symfony.com/doc/current/cookbook/security/voters.html

于 2013-04-08T09:15:48.173 回答