Crear Usuario por defecto en Symfony

symfony_1_1.jpg
Solucionex
14
Sep 18

En la gran mayoría de las aplicaciones que desarrollamos en Symfony vamos a utilizar un sistema de usuarios y de permisos para administrarla, o acceder a distintos módulos de la web... Es algo que variará en función del tipo de aplicación que nos hayan encargado programar.

El caso es que hay que crear un primer usuario con el que poder empezar a utilizar la aplicación cuando la migremos o cuando la pongamos en producción, para ello te proponemos estas soluciones:

Utilizar fixtures

De esto ya hablamos en el blog, en esta entrada sobre cómo precargar datos en symfony, puedes utilizarlo para crear un usuario superadministrador con el que empezar a interactuar con la aplicación.

Comando de FOSUserBundle

¿Usas FOSUserBundle para la seguridad de tus desarrollos en Symfony? Es un bundle muy completo y que te ahorrará mucho tiempo, lo mejor es que para crear un nuevo usuario solo tendrás que escribir en la consola este comando:

php bin/console fos:user:create

Y una vez creado, no olvides darle el rol que necesite para administrar la aplicación:

php bin/console fos:user:promote

Crea tu propio comando

La documentación de Symfony es un lujo y en esta página encontrarás para cualquier versión cómo crear un comando de symfony. Precisamente el ejemplo que utiliza es la creación de un usuario.

Este es el método que más libertad ofrece al fin y al cabo, podemos pedir al usuario que introduzca la contraseña por línea de comandos, poner una hardcoded o la solución intermedia, cogerla del parameters.yml, así cuando montemos el proyecto con composer se la pedirá al desarrollador que esté montando la aplicación.

Lo "único" que tendremos que hacer es darle un nombre descriptivo a nuestro comando, por ejemplo:

protected function configure() { $this->setName('app:create-default-admin') ...

Y en la función de ejecución, lo que hemos dicho, crear una entidad usuario, asignarle un nombre, el rol que queremos que tenda y una contraseña, y persistirlo en la base de datos.

protected function execute(InputInterface $input, OutputInterface $output) { ... $admin = new User(); $admin->setUsername($this->params->get('admin.username')) $admin->setPassword($this->encoder->encodePassword($administrator, $this->params->get('admin.password'))); ...

Después de esto ya tenemos un usuario administrador y, si hemos desarrollado correctamente la aplicación en Symfony, ya podría crear más usuarios si fuese necesario y administrar la aplicación en general.