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

Agregar roles en FOSUserBundle

14 de abril de 2015

Me pasa lo mismo que un usuario del foro que publicó esto:


He implementado FOSUserBundle, y quiero agregarle al RegisrationFormType los roles que sean tomados de una tabla. Al momento lo tenía asi:

->add('roles', 'choice', array('label' => 'Rol', 'required' => true, 
                           'choices' => array( 'ROLE_ADMIN' => 'ADMINISTRADOR','ROLE_SUPERADMIN' => 'SUPERADMINISTRADOR', 
                                               'ROLE_USER' => 'USUARIO'), 'multiple' => true))

¡Y funciona! Pero deben salir de la BD, no le puedo poner el campo Entity porque roles debe ser un array, no un objeto. ¿Cómo puedo generar el array con los roles tomados de una tabla? ¿En FosUSerbundle como le debería agregar los roles?

Gracias ....


Lo escribo porque este usuario no tuvo respuesta. He seguido [los pasos de la documentacion oficial](https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md ) y agregando las líneas de arriba en el register del FOSUserBundle funciona, pero quiero poder trabajar esto desde la base de datos.

Y luego para crear grupos utilicé esto. Se crearon dos tablas adicionales e incluso ya ingresé un grupo o rol en la lista, pero no se cómo mostrarlo en el login para registrar un nuevo usuario.

¿Alguien lo ha solucionado?


Respuestas

#1

Hola , no se si resolviste tu problema. Vi esto en un foro, aun no lo he intentado, espero sea de ayuda.

http://stackoverflow.com/questions/28439512/add-roles-field-to-fosuserbundle-group-form-solved

@miguelplazasr

21 mayo 2015, 1:26
#2

A mi me ha funcionado invirtiendo choices:

->add('roles', 'choice', array(
                'label' => 'Rol',
                'required' => true,
                'choices' => array(
                    'Administrador' => 'ROLE_ADMIN',
                    'Superadministrador' => 'ROLE_SUPER_ADMIN',
                    'Usuario' => 'ROLE_USER'),
                'multiple' => true))

Conserva el campo de roles igual que si se introdujeran los usuarios por terminal:

username roles
admin a:1:{i:0;s:10:"ROLE_ADMIN";}
testuser a:1:{i:0;s:10:"ROLE_ADMIN";}
aaa a:0:{}

EDIT:

Indagando un poco más he encontrado una forma mejor de hacerlo (sin hardcode):

->add('roles', 'choice', array(
                'label' => 'Rol',
                'required' => true,
                'choices' => $this->getExistingRoles(),
                'multiple' => true))
 
// debajo de todas la funciones configure...() añado la funcion getExistingRoles() :
 
public function getExistingRoles()
    {
        // sintaxis dentro de admin class:
        $roleHierarchy = $this->getConfigurationPool()->getContainer()->getParameter('security.role_hierarchy.roles');
        // sintaxis dentro de un controlador:
        // $roleHierarchy = $this->container->getParameter('security.role_hierarchy.roles');
        $roles = array_keys($roleHierarchy);
        $theRoles = array();
 
        foreach ($roles as $role) {
            $theRoles[$role] = $role;
        }
        return $theRoles;
    }

@LauraLoopback

31 agosto 2017, 7:47