Atención
Este documento está en construcción inicial, disculpe las molestias.
Gestión de usuarios en Yii2 usando yii2-admin
Tabla de Contenidos
Introducción.
Instalando yii2-admin.
Desde dentro del directorio raíz del proyecto, como usuario, se ejecuta:
composer require mdmsoft/yii2-admin "*"
Configuración.
En el archivo ./config/web.php agregar las siguientes líneas
$config = [
'modules' => [
'admin' => [
'class' => 'mdm\admin\Module',
...
]
...
],
...
'components' => [
....
'authManager' => [
'class' => 'yii\rbac\DbManager', // o 'yii\rbac\PhpManager'
]
],
'as access' => [
'class' => 'mdm\admin\components\AccessControl',
'allowActions' => [
// agregar acciones para permitir acceso a todos
'site/*',
'admin/*', // Eliminar cuando ya se haya configurado un usuario administrador
]
],
];En el archivo ./config/console.php agregar la siguiente línea:
'components' => [
...
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
...
],Con esto ya está configurado lo básico del módulo Yii2-admin, se puede ingresar a cada acción desde esta ruta
http://localhost/path/to/index.php?r=admin http://localhost/path/to/index.php?r=admin/route http://localhost/path/to/index.php?r=admin/permission http://localhost/path/to/index.php?r=admin/menu http://localhost/path/to/index.php?r=admin/role http://localhost/path/to/index.php?r=admin/assignment
Sin embargo se mostrará un error indicando lo siguiente:
PHP Fatal Error – yii\base\ErrorException Call to undefined method app\models\User::find()
Acá es dónde debemos agregar algunas cosas a Yii2-admin para que esté completamente funcional. Yii2-admin asume que se tiene una tabla de usuarios en la base de datos y un modelo en Yii2 para dicha tabla, esto no existe en una instalación de Yii2 usando el template básico, todo lo contrario pasa al usar el template avanzado por lo tanto vamos a copiar algunas cosas de la instalación avanzada a la básica.
Configurando el registro y logueo de usuarios
Al final de este documento se encuentran los archivos que necesitaremos copiar, primero vamos con el archivo que creará la tabla de usuarios, este archivo se encuentra en la siguiente ruta:
./vendor/yiisoft/yii2/rbac/migrations/m130524_201442_init.php
Lo copiaremos a la misma ruta en nuestro proyecto.
Luego copiaremos los archivos del modelo, controlador y vistas. Los archivos del modelo se encuentra en la siguiente ruta:
./models/User.php ./models/PasswordResetRequestForm.php ./models/ResetPasswordForm.php ./models/SignupForm.php
Al igual que el anterior lo copiaremos a la misma ruta en nuestro proyecto y sobrescribiremos los archivos que ya estaban.
Ahora copiamos los controladores :
./controllers/SiteController.php
Ahora copiamos las vistas:
./views/site/signup.php ./views/site/resetPassword.php ./views/site/requestPasswordResetToken.php ./views/site/login.php
Corriendo los scripts de migración
Yii2-admin pone a disposición un menú de administración ya listo para usar, para activar este menú se debe correr el siguiente comando desde el directorio raíz de nuestro proyecto:
yii migrate --migrationPath=@mdm/admin/migrations
Luego para crear la tabla de usuarios:
yii migrate --migrationPath=@yii/rbac/migrations
Personalizando el controlador
Es necesario personalizar el controlador de yii2-admin para que se acople con el modelo que estamos usando para la administración de usuarios, para esto se debe agregar el siguiente código en el archivo de configuración ./config/web.php.
'modules' => [
'admin' => [
...,
'controllerMap' => [
'assignment' => [
'class' => 'mdm\admin\controllers\AssignmentController',
'userClassName' => 'app\models\User',
'idField' => 'id',
]
],
...
]
...
],
Personalizando el menú
Para que aparezca el menú con todas las opciones para administrar usuarios se agrega el siguiente código en el archivo de configuración ./config/web.php.
'modules' => [
'admin' => [
...,
'layout' => 'left-menu', //otros valores 'right-menu', 'top-menu' y 'null'
],
...
],Luego para personalizar el nombre de cada ítem se puede agregar:
'modules' => [
'admin' => [
...,
'menus' => [
'assignment' => [
'label' => 'Grand Access'
],
'route' => null, // deshabilitar ítem
],
],
...
],
