2012-09-25 15 views
5

Mientras probaba los roles en mi aplicación encontré la función isGranted del SecurityContext. Funciona muy bien, pero ahora necesito verificar las funciones de un usuario que no es el usuario actual, así que isGranted no funciona para mí.Alternativas a isGranted en Symfony2

He estado buscando y encontré la función hasRole del usuario, el problema es que esta función no se ve en el árbol de jerarquía de Symfony y simplemente busca en los roles asignados al usuario.

Entonces, ¿hay alguna función que busque la función de un usuario que busca en el árbol de jerarquía como isGranted hacer para el usuario actual?

EDITAR

me encontré con esta solución:

How to use the AccessDecisionManager in Symfony2 for authorization of arbitrary users?

he implementado y funciona, el problema es que se necesita la ContainerBuilder y yo preferiría un enfoque diferente.

¿Alguna idea?

+0

Sus funciones deben ser almacenados en su base de datos por lo que sólo puede hacer una solicitud para obtener el rol de un usuario diferente al que está conectado (lo siento, no sé si hay un método para esto, es solo otra idea para resolver su problema) – Snroki

+1

¿Cuál es el caso de uso? –

+1

Tengo una lista de usuarios y, dependiendo de las funciones del usuario, las acciones que se pueden aplicar varían – graffiacane

Respuesta

0

Básicamente AFAIK SecurityContext funciona con Symfony\Component\Security\Core\Authentication\Token\TokenInterface desde donde puede buscar el usuario actual usando el método getUser.

Si token de usuario no está autenticado luego isGranted tratando de usuario autentificar símbolo primero y luego utilizar clase llamada AccessDecisionManager que básicamente iterar sobre los votantes objetos y llamar a ellos (y puede utilizar diferentes estrategias para eso) Uno de los llamados votantes es RoleHierarchyVoter que utilizan Symfony\Component\Security\Core\Role\RoleHierarchy .

Así que la respuesta a su pregunta:

Creo que hay tal función como isGranted para otros usuarios (o no saben de ninguna), pero se puede escribir propio servicio que permiten que el uso de security.role_hierarchy (apenas se dio cuenta eso es servicio privado).

Por cierto hasRole probablemente debería ser suficiente la mayoría del tiempo, por lo que tal vez debería pensar en lo que quieres hacer;)

+1

Hola l3l0, la función hasRole no es suficiente porque necesito buscar en el árbol de jerarquía. – graffiacane

+0

Hola @graffiacaneif Si usa FOSUserBundle tiene un método como getRoles que debería devolver todos los roles de usuario, consulte https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/User.php#L312 y Model/User :: hasRole debería funcionar también – l3l0

+0

Hola l3L0, quizás no estoy explicando bien, pero estas funciones no devuelven los roles que un usuario ha heredado del árbol de jerarquía, solo los que están asociados al usuario en la base de datos. – graffiacane