Blog Details

Tutorial de roles y permisos de usuario en Laravel 12 y MySQL

El paquete de creación de permisos de roles de Spatie permite crear ACL en Laravel 12. Proporciona instrucciones sobre cómo asignar un rol a un usuario, cómo asignar permisos a un usuario y cómo asignar permisos a roles. Escribiré instrucciones paso a paso para crear roles y permisos en la aplicación de Laravel 12.

Los roles y permisos permiten crear varios tipos de usuarios con diferentes roles y permisos. Por ejemplo, algunos usuarios solo pueden ver el módulo de lista de elementos, mientras que otros también pueden editar y eliminar elementos.

En este ejemplo, creé tres módulos como se enumeran a continuación:

  • Gestión de usuarios
  • Gestión de roles
  • Gestión de productos

Tras registrar un usuario, no tendrá ningún rol. Por lo tanto, puede editar sus datos y asignarse el rol de administrador desde la Gestión de Usuarios. Después, puede crear su propio rol con permisos como lista de roles, creación de roles, edición de roles, eliminación de roles, lista de productos, creación de productos, edición de productos y eliminación de productos. Puede probar esto asignando un nuevo usuario y comprobándolo.

Solo tienes que seguir unos pocos pasos y obtendrás un ejemplo completo de ACL:

Ejemplo de roles y permisos para ACL de Laravel 12
  • Paso 1: Instalar Laravel 12
  • Paso 2: Instale el paquete spatie/laravel-permission
  • Paso 3: Crear la migración del producto
  • Paso 4: Crear modelos
  • Paso 5: Agregar middleware
  • Paso 6: Crear autenticación
  • Paso 7: Crear rutas
  • Paso 8: Agregar controladores
  • Paso 9: Agregar archivos Blade
  • Paso 10: Crear un sembrador para permisos y usuarios administradores
  • Ejecutar la aplicación Laravel
Paso 1: Instalar Laravel 12

Primero, necesitamos obtener una aplicación nueva de Laravel 12 usando el siguiente comando, ya que estamos empezando desde cero. Abre tu terminal o símbolo del sistema y ejecuta el siguiente comando:

				
					composer create-project laravel/laravel example-app

				
			
Paso 2: Instale el paquete spatie/laravel-permission

Ahora, necesitamos instalar el paquete Spatie para ACL; de esta manera, podemos usar su método. También instalaremos el paquete de colección de formularios. Abra su terminal y ejecute el siguiente comando.

				
					composer require spatie/laravel-permission


				
			

También podemos personalizar los cambios en el paquete Spatie, por lo que si también desea realizar cambios, puede ejecutar el siguiente comando y obtener el archivo de configuración en config/permission.php y los archivos de migración.

				
					php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

				
			

Ahora puede ver el archivo permission.php y una migración. Puede ejecutar la migración con el siguiente comando:

				
					php artisan migrate


				
			
Paso 3: Crear la migración del producto

En este paso, tenemos que crear tres migraciones para la tabla de productos usando el siguiente comando:

				
					php artisan make:migration create_products_table



				
			

Tabla de productos:

				
					<?php
  
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
  
return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('detail');
            $table->timestamps();
        });
    }
  
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};
				
			

Ahora, ejecute la migración:

				
					php artisan migrate

				
			
Paso 4: Crear modelos

En este paso, debemos crear un modelo para las tablas Usuario y Producto. Si crea un proyecto nuevo, tendrá un modelo Usuario, así que simplemente reemplace el código. Para el otro, deberá crear uno.

app/Models/User.php

				
					<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasFactory, Notifiable, HasRoles;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * Get the attributes that should be cast.
     *
     * @return array
     */
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }
}

				
			

app/Models/Product.php

				
					<?php
  
namespace App\Models;
  
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
  
class Product extends Model
{
    use HasFactory;
  
    /**
     * The attributes that are mass assignable.
     *	
     * @var array
     */
    protected $fillable = [
        'name', 'detail'
    ];
}

				
			
Paso 5: Agregar middleware

El paquete Spatie proporciona su middleware incorporado, que podemos usar de forma sencilla y se muestra a continuación:

role

permission

Entonces, tenemos que agregar middleware en el archivo app.php de esta manera:

bootstrap/app.php

				
					<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
            'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
            'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();
				
			
Paso 6: Crear autenticación

Debes seguir algunos pasos para realizar la autenticación en tu aplicación Laravel 12.

Primero, debes instalar el paquete laravel/ui como se muestra a continuación:

				
					composer require laravel/ui
				
			

Aquí, necesitamos generar el andamiaje de autenticación en Laravel 12 usando el comando Laravel UI. Así que, generémoslo con el siguiente comando:

				
					php artisan ui bootstrap --auth

				
			

Ahora debe ejecutar el comando npm; de lo contrario, no podrá ver el mejor diseño de la página de inicio de sesión y registro.

Instalar NPM:

				
					npm install
				
			

Ejecutar NPM:

				
					npm run build
				
			

Leave A Comment

Cart
Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
Click outside to hide the comparison bar
Compare