diff --git a/app/Livewire/RoleView.php b/app/Livewire/RoleView.php index 36006d3..f08071a 100644 --- a/app/Livewire/RoleView.php +++ b/app/Livewire/RoleView.php @@ -51,6 +51,23 @@ class RoleView extends Component $this->dispatch('notify', 'Permisos actualizados'); } + public function setGroup(string $group, bool $enabled): void + { + $names = Permission::where('group', $group)->pluck('name'); + + foreach ($names as $name) { + // Admin must always keep the core permission + if (! $enabled && $this->role->name === 'Admin' && $name === self::CORE_PERMISSION) { + continue; + } + $enabled ? $this->role->givePermissionTo($name) : $this->role->revokePermissionTo($name); + } + + app(PermissionRegistrar::class)->forgetCachedPermissions(); + $this->role->load('permissions'); + $this->dispatch('notify', $enabled ? 'Permisos del grupo activados' : 'Permisos del grupo desactivados'); + } + public function delete() { if (in_array($this->role->name, self::PROTECTED_ROLES, true)) { diff --git a/resources/views/livewire/roles/role-view.blade.php b/resources/views/livewire/roles/role-view.blade.php index e5cb9ff..ce0279d 100644 --- a/resources/views/livewire/roles/role-view.blade.php +++ b/resources/views/livewire/roles/role-view.blade.php @@ -101,17 +101,34 @@ {{-- ═══════════════ TAB PERMISOS ═══════════════ --}} @if($tab === 'permisos') -
+
@forelse($grouped as $section => $perms) -
-

- {{ $section }} -

-
+
+ {{-- Cabecera del grupo: colapsable + marcar/desmarcar todo --}} +
+ +
+ + +
+
+ + {{-- Lista de permisos: una sola columna (permiso izquierda, switch derecha) --}} +
@foreach($perms as $perm) -