Symfony2>更容易确定访问的方式

时间:2013-12-13 15:20:51

标签: php symfony

我正忙着在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比我正在进行的过程更少,因为它看起来非常麻烦。

2 个答案:

答案 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的建议设置防火墙,以防止首先调用该操作。