➜ 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/.
Rutas
Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.)->group(function () {
Route::resource('role', RoleController::class)->only(['edit', 'update']);
});
2539 visitas
Capítulo 16 – Categorías »
Descarga el código del proyecto
Descarga el código fuente del proyecto adquiriendo el curso completo
Comprar