Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Obtener roles disponibles en la aplicación

23 de febrero de 2015

Hola, he buscado por internet la manera de obtener los roles que se han configurado mediante la opción role_hierarchy en la aplicación y no logro hacerlo. He visto código de otros bundles y no lo consigo, quiero que sea un código propio por lo que no quiero usar un bundle de terceros.

Lo que necesito es obtener el listado de roles, en un array u objeto que me de acceso a los mismos.

Gracias.


Respuestas

#1

Buenas, hay un servicio security.role_hierarchy que es una clase que implementa la interfaz RoleHierarchyInterface.

Un ejemplo para obtener todos los roles de un usuario en un controlador sería algo como:

public function myAction()
{
    // Obteniendo el token en Symfony 2.6
    $token = $this->get('security.token_storage')->getToken();
 
    // Obteniendo el token en Symfony < 2.6
    $token = $this->get('security.context')->getToken();
 
    $roles = $this->get('security.role_hierarchy')
                  ->getReachableRoles($token->getRoles());
}

Saludos!

@manuel_j555

24 febrero 2015, 0:30
#2

A perdón, al volver a leer tu pregunta, veo que estás pidiendo todos los roles de la aplicación.

Estos roles se encuentran en un parametro del contenedor llamado security.role_hierarchy.roles.

Saludos!

@manuel_j555

24 febrero 2015, 0:35
#3

Hola, gracias por tu respuesta, ya he revisado ese servicio pero no funciona, es decir, obtengo el servicio pero no puedo acceder a los roles...

@ramiroanacona

24 febrero 2015, 0:39
#4

¿Y el parametro security.role_hierarchy.roles que mencioné más arriba, lo has utilizado?

En ese parametro están los roles definidos en el security.yml, Saludos!

@manuel_j555

24 febrero 2015, 1:55
#5

Ese servicio security.role_hierarchy.roles no existe, no al menos en la versión 2.6

Y con el servicio security.role_hierarchy no encuentro la manera de obtener los roles...

@ramiroanacona

24 febrero 2015, 2:03
#6

Es que no es un servicio, es un parametro que contiene un array con los roles:

public function myAction()
{
    dump($this->container->getParameter('security.role_hierarchy.roles'));
}

@manuel_j555

24 febrero 2015, 3:44
#7

En este pull request de la documentación de Symfony puedes ver un ejemplo de cómo usamos el RoleHierarchy para decidir si un usuario tiene el rol indicado.

Una cosa importante a tener en cuenta es que el servicio security.role_hierarchy no existe a menos que la configuración de seguridad de la aplicación defina una jerarquía de roles.

@javiereguiluz

24 febrero 2015, 8:08