我正忙着在Symfony2中编写API。其中一个API函数是返回所有用户(并非罕见)。显然,在我返回用户列表之前,我必须确保用户已登录并且在返回用户之前至少具有ROLE_ADMIN。目前我这样做:
public function getAllUsersAction()
{
$user = $this->getUser();
if ($user == null) die("Unauthorized");
$userRoles = $user->getRoles();
$bAuthorized = false;
foreach ($userRoles as $userRole)
if ($userRole->getRole() == "ROLE_ADMIN" || $userRole->getRole() == "ROLE_SUPER_ADMIN")
$bAuthorized = true;
if ($bAuthorized) return createJsonResponse($this->getDoctrine()->getRepository('PmbLicensingBundle:User')->findAll());
else die("Unauthorized");
}
我的问题是,在Symfony中是否有一种更简单的方法来确定用户是否已登录并且ROLE_ADMIN比我正在进行的过程更少,因为它看起来非常麻烦。
答案 0 :(得分:1)
身份验证逻辑不属于控制器的操作。您的软件必须检查用户是否在访问操作之前登录,如果身份验证失败或给定角色不足,则重定向响应。
FosUserBundle是一个很棒的工具,可以为您提供大量的安全性和身份验证。在SO上已经有人解答如何配置FosUserBundle以使用REST,例如
How to restfully login, Symfony2 Security, FOSUserBundle, FOSRestBundle?
答案 1 :(得分:1)
尝试:
if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) die('Nope Nope Nope');
当然,您可以按照@ artworkad的建议设置防火墙,以防止首先调用该操作。