Capitulo 15 del Módulo 4 Rol Admin Administración

➜ Gestión de permisos del rol Editor

Gestión de permisos del Rol Editor en una interfaz independiente | Separar la gestión de permisos del Rol Editor en una interfaz independiente, accesible desde el Dashboard del Admin.

La asignación de permisos se realizará exclusivamente por Rol (en este caso, el Rol "Editor") y no por cada usuario individualmente. Esto permite una gestión centralizada y más ordenada, donde cualquier cambio en los permisos del rol afectará a todos los usuarios asignados al mismo.

Interacciones

1️⃣ Admin accede al Dashboard
→ Selecciona el enlace "Gestionar Permisos del Rol Editor".

2️⃣ Redirección a la vista de edición (admin.role.edit, 2)
→ Se muestra un formulario con checkboxes listando los permisos. Los permisos asignados al rol están marcados.

3️⃣ Admin selecciona o deselecciona permisos
→ Marca o desmarca los permisos según lo requerido.

4️⃣ Envía el formulario
→ Se ejecuta el método update del RoleController. Los permisos se sincronizan con el Rol Editor.

5️⃣ Confirmación de actualización
→ Redirección al Dashboard con un mensaje.  Los cambios afectan a todos los usuarios con el Rol Editor.

Estructura de archivos

├── app
│   └── Http
│       └── Controllers
│           └── Admin/RoleController.php         <-- Nuevo Controlador para gestión de permisos
├── resources
│   └── views
│       └── admin
│           ├── dashboard.blade.php        <-- Enlace para gestionar permisos)
│           └── role
│               └── edit.blade.php         <-- Vista para asignar/desasignar permisos
│
└── routes
   └── web.php                             <-- Rutas para editar y actualizar permisos

Antes debemos modificar el CRUD de User para eliminar los permisos

Modificación en el Dashboard

En la vista del admin.dashboard, agregaremos un enlace para redirigir directamente a la edición de permisos del rol Editor:


       <div class="col-sm-3">
            <div class="card">
                <div class="card-body">
                    <p class="text-center">Gestión de permisos del rol editor</p>
                </div>
                <div class="card-footer">
                    <a href="{{route('admin.role.edit',2)}}" class="btn btn-dark w-100">Permisos</a>
                </div>
            </div>
        </div>

✍️ Nota: El ID 2 corresponde al rol "Editor". Este valor puede ajustarse según tu base de datos.

Creación del controlador

Crea el controlador Admin/RoleController

php artisan make:controller Admin/RoleController

Contiene métodos:

  • edit()     : Formulario
  • update()     : Procesa la sincronización de permisos

Código del controlador RoleController

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
use App\Http\Controllers\Controller;
use Spatie\Permission\Models\Permission;

class RoleController extends Controller
{
    public function edit(Role $role){
        $permissions = Permission::all();
        return view('admin.role.edit',compact('role','permissions'));
    }

    public function update(Request $request, Role $role){
        $role->syncPermissions($request->permissions??[]);
        return redirect()->back()->withSuccess("Sincronizacion de permisos correcta");
    }

}

Vistas

Extienden un layout principal ubicado en: resources/views/layouts/admin.blade.php

admin.role.edit

@extends('layouts.admin')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <form action="{{route('admin.role.update',$role)}}" method="post" enctype="multipart/form-data">
                @csrf
                @method('PUT')
                <div class="card bg-white">
                    <div class="card-header d-flex justify-content-between align-items-center">
                        <b>Actualizar permisos del rol editor </b>
                        <div class="btn-group">
                            <a href="{{route('admin.dashboard')}}" class="btn btn-danger">X</a>
                            <button type="submit" class="btn btn-dark">Actualizar</button>
                        </div>
                    </div>
                    <div class="card-body">

                        @include('partials.message')

                        <h3>Permisos</h3>
                        @foreach ($permissions as $permission)
                        <label for="permiso{{$loop->iteration}}" class="d-block">
                            <input type="checkbox" name="permissions[]" id="permiso{{$loop->iteration}}"
                            value="{{$permission->name}}"
                            {{$role->hasPermissionTo($permission->name)?'checked':''}}>
                            {{$permission->name}}
                        </label>
                        @endforeach                     

                    </div>
                </div>
            </form>
        </div>
    </div>
</div>
@endsection

 

📌 Vistas organizada en admin/role/.

Diseño Gestion de permisos para un rol

Rutas

Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.)->group(function () {
    Route::resource('role', RoleController::class)->only(['edit', 'update']);
});

 

 

 


2540 visitas

Capítulo 16 – Categorías »

Descarga el código del proyecto

Descarga el código fuente del proyecto adquiriendo el curso completo

Comprar

¡Qué aprenderás?

Download PDF
tooltip bs-tooltip-top bs-tooltip-end bs-tooltip-bottom bs-tooltip-start show fade tooltip-inner

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú