feat(roles): Rappasoft list, slim create form, and 2-tab role view

1. Roles list now uses a Rappasoft table (RoleTable): search/sort, per-row
   view/edit/delete, and built-in bulk selection + 'Delete selected'. The
   /admin/roles page is a plain view embedding <livewire:role-table />.
   RoleForm create/edit now only has Name + Description (permissions removed).
2. New RoleView page (/admin/roles/{role}) with two tabs:
   - 'Details': header with role name + Back button; description with Edit/Delete
     buttons; table of users holding the role (avatar+name | last name | status).
   - 'Permissions': all permissions grouped by section (by resource), each with a
     toggle switch to grant/revoke for this role (Admin keeps 'manage all').
Removed the old RoleManager component/view (superseded).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-17 17:21:16 +02:00
parent 5092896a1e
commit 5587026446
9 changed files with 364 additions and 258 deletions
+2 -1
View File
@@ -136,9 +136,10 @@ Route::get('/reports/dashboard', ReportsDashboard::class)->name('reports.dashboa
Route::get('/users/create', \App\Livewire\UserForm::class)->name('users.create');
Route::get('/users/{user}', \App\Livewire\UserView::class)->name('users.show');
Route::get('/users/{user}/edit', \App\Livewire\UserForm::class)->name('users.edit');
Route::get('/roles', \App\Livewire\RoleManager::class)->name('roles');
Route::get('/roles', function () { return view('admin.roles'); })->name('roles');
Route::get('/roles/create', \App\Livewire\RoleForm::class)->name('roles.create');
Route::get('/roles/{role}/edit', \App\Livewire\RoleForm::class)->name('roles.edit');
Route::get('/roles/{role}', \App\Livewire\RoleView::class)->name('roles.show');
Route::get('/permissions', \App\Livewire\RolePermissionManager::class)->name('permissions');
});