Как я могу проверить, есть ли у пользователя, не вошедшего в систему, роль? - PullRequest
2 голосов
/ 02 марта 2012

У меня есть ситуация, когда мне нужно проверить роли для пользователя, который не вошел в систему.

Первоначально я просто запрашивал поле roles таблицы users, чтобы узнать, содержится ли рассматриваемая роль, но это не учитывает иерархию ролей. Например, если пользователю предоставлено ROLE_ADMIN, у него также будет ROLE_USER. Тем не менее, вы не увидите ROLE_USER в базе данных, так как в этом случае она включена в ROLE_ADMIN.

Я немного незнаком с внутренними механизмами безопасности Symfony2 - я бы хотел «смоделировать» токен для пользователя (на основании его имени), но я не уверен, как это сделать даже возможно. Я копался в компоненте Security, но пока не нашел решения.

Можно ли проверить роли пользователя, который не вошел в систему?

1 Ответ

5 голосов
/ 03 марта 2012

Чтобы получить список ролей, которые имеют пользователи, взгляните на этот код

use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Security\Core\Role\RoleHierarchy;

//....
$roleHierarchy = new RoleHierarchy($this->container->getParameter('security.role_hierarchy.roles'));
$userRoles = array(new Role('ROLE_ADMIN')); // Or $securityContext->getToken()->getRoles()
$reachableRoles = $roleHierarchy->getReachableRoles($userRoles);
...