Diciembre, 2019
email : rhodfra@gmail.com
Laravel Framework 6.7.0 | PHP 7.3.11 (cli) (built: Oct 23 2019 16:31:28) ( NTS ) | Laravel Installer 2.1.0
TMulti-Auth es una plantilla de como implementar un sistema multi-usuario:
- Usuario administrador
- Usuario común
Existen dos formas de implementar un sistema multi-usuario. Ambas utilizan el sistema de autentificación semi-integrado con laravel.
- Agregar un atributo al modelo de usuario que podría llamarse
rol
otipo
y mediante lógica de programación ir preguntando en cada vista o controlador si el usuario tiene rol de administrador o su rol es de usuario común. - Agregar
guards
yproviders
, crear un modelo llamadoAdmin
y posteriormente modificarMiddlewares
,Handlers
, crear nuevos controladores y rutas para los administradores.
La segunda opción es más complicada que la primera, pero ofrecer algunas ventajas:
- Al estar completamente separado el Usuario común y el usuario Admin, se pueden crear jerarquías en el usuario común y los subtipos no tendrán nada que ver con el administrador. A nivel de base de datos esto permite un mayor desempeño.
- La seguridad es mayor ya que los datos del administrador se aislan completamente de los del usuario.
- La lógica de programación se simplifica ligeramente.
TMulti-Auth es una implementación basada en guards y providers
Asegurarse de tener todo lo necesario para trabajar con laravel
- php (para el caso de TMulti-auth, php >= 7.2)
- composer
- npm
Para usar la plantilla se deberán seguir los siguientes pasos:
-
Descargar el repositorio.
Se puede usar git
git clone https://github.com/rhofp/Tmulti-auth.git
O directamente se puede descargar el archivo comprimido en formato zip.
-
Descargar las dependencias de php del proyecto.
composer install
-
Descargar las dependencias de javascript del proyecto.
npm install && npm run dev
-
Configurar una la conexión con una base de datos.
Se puede configurar cualquier base de datos soportada por Laravel, como ejemplo sencillo se presenta la conexión con
sqlite
Generar un archivo en blanco llamado
database.sqlite
en la carpeta databasetouch database/database.sqlite
Este es mi archivo .env el cual nunca se sube al repositorio porque es un archivo de configuración crítico.
APP_NAME=Laravel APP_ENV=local APP_KEY=base64:5Tc+VhWjcEW7ayLq+AL147ccKLKk1uj6CzbiykYfvrM= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=sqlite BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=sync SESSION_DRIVER=cookie SESSION_LIFETIME=120 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
-
Crear una llave del proyecto.
php artisan key:generate
-
Generar las migraciones del proyecto.
php artisan migrate
El uso de este proyecto se puede inferir con tal solo revisar el archivo routes/web.php
. Sin embargo se deja una guía básica de que hace y que no hace.
-
Se usa el sistema de autentificación que laravel tiene semi-integrado. Dicho sistema permanece intacto.
-
Se debe crear un usuario administrador para poder probar la funcionalidad, esto se puede hacer en la terminal provista por laravel (tinker).
php artisan tinker ======================================================== Psy Shell v0.9.12 (PHP 7.3.11 — cli) by Justin Hileman $admin = new App\Models\Admin $admin -> name = 'admin' $admin -> lastname = 'root' $admin -> email = 'admin@example.com' $admin -> password = Hash::make('rootadmin') $admin -> save()
-
Iniciar el servidor
php artisan serve
-
Se adiciona un sistema de logeo para usuarios administradores
127.0.0.1:8000/admin/login
Al colocar correctamente las credenciales del usuario administrador se le redirige a
127.0.0.1:8000/admin
. -
Un usuario administrador y un usuario común pueden estar logeados al mismo tiempo.
-
Las rutas del proyecto se muestran a continuación.
Route::prefix('admin')->group(function() { Route::get('/login','Auth\AdminLoginController@showLoginForm')->name('admin.login'); Route::post('/login', 'Auth\AdminLoginController@login')->name('admin.login.submit'); Route::get('logout/', 'Auth\AdminLoginController@logout')->name('admin.logout'); Route::get('/', 'AdminController@index')->name('admin.dashboard'); }) ; Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home');
Todas las contribuciones al proyecto son bienvenidas, se recomienda revisar el archivo correspondiente CONTRIBUTING.
The Laravel framework is open-sourced software licensed under the MIT license.
Este template no hubiera sido posible sin los siguientes tutoriales
- https://www.codermen.com/blog/123/how-to-make-multi-auth-in-laravel-6
- https://github.com/DevMarketer/multiauth_tutorial
- https://www.youtube.com/watch?v=Ir2nAD9UDGg
Mi contribución se basa en implementar y actualizar dichos tutoriales para que puedan servir directamente a la comunidad sin tener que pasar por los n pasos de los tutoriales mencionados.