feat(permissions): full permission catalogue grouped by section
- Migration: add 'group' and 'description' columns to the permissions table. - PermissionCatalogSeeder (idempotent updateOrCreate): full catalogue across 11 sections — Proyectos, Fases y progreso, Capas y elementos, Inspecciones, Incidencias, Empresas, Usuarios, Roles, Informes, Archivos, General. Sets group + description on existing and creates the new ones; does NOT touch role assignments. Registered in DatabaseSeeder. - RoleView: group permission toggles by the 'group' column in a defined section order and show each permission's description. DB updated locally (migrate + seed run). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,7 @@ class DatabaseSeeder extends Seeder
|
||||
|
||||
$this->call([
|
||||
RolesAndPermissionsSeeder::class,
|
||||
PermissionCatalogSeeder::class,
|
||||
ProjectExampleSeeder::class,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
use Spatie\Permission\PermissionRegistrar;
|
||||
|
||||
class PermissionCatalogSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Full permission catalogue, grouped by section.
|
||||
* Idempotent: updates group/description on existing permissions and
|
||||
* creates the missing ones. Does NOT change role assignments.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$guard = config('auth.defaults.guard', 'web');
|
||||
|
||||
$catalog = [
|
||||
'Proyectos' => [
|
||||
'view projects' => 'Ver listado y fichas de proyectos',
|
||||
'create projects' => 'Crear proyectos',
|
||||
'edit projects' => 'Editar datos del proyecto',
|
||||
'delete projects' => 'Eliminar proyectos',
|
||||
'export projects' => 'Exportar proyectos (Excel/PDF)',
|
||||
],
|
||||
'Fases y progreso' => [
|
||||
'view phases' => 'Ver fases del proyecto',
|
||||
'manage phases' => 'Crear, editar, ordenar y eliminar fases',
|
||||
'update progress' => 'Actualizar el porcentaje de progreso',
|
||||
],
|
||||
'Capas y elementos' => [
|
||||
'view layers' => 'Ver capas y elementos en el mapa',
|
||||
'upload layers' => 'Subir/importar capas',
|
||||
'edit layers' => 'Editar capas y elementos',
|
||||
'delete layers' => 'Eliminar capas/elementos',
|
||||
],
|
||||
'Inspecciones' => [
|
||||
'view inspections' => 'Ver inspecciones e historial',
|
||||
'create inspections' => 'Registrar inspecciones',
|
||||
'delete inspections' => 'Eliminar inspecciones',
|
||||
'manage templates' => 'Gestionar plantillas de inspección',
|
||||
],
|
||||
'Incidencias' => [
|
||||
'view issues' => 'Ver incidencias',
|
||||
'create issues' => 'Crear incidencias',
|
||||
'edit issues' => 'Editar, resolver y cerrar incidencias',
|
||||
'delete issues' => 'Eliminar incidencias',
|
||||
],
|
||||
'Empresas' => [
|
||||
'view companies' => 'Ver empresas',
|
||||
'create companies' => 'Crear empresas',
|
||||
'edit companies' => 'Editar empresas',
|
||||
'delete companies' => 'Eliminar empresas',
|
||||
],
|
||||
'Usuarios' => [
|
||||
'view users' => 'Ver usuarios',
|
||||
'create users' => 'Crear usuarios',
|
||||
'edit users' => 'Editar usuarios',
|
||||
'delete users' => 'Eliminar usuarios',
|
||||
'assign users' => 'Asignar usuarios/roles a proyectos',
|
||||
],
|
||||
'Roles' => [
|
||||
'manage roles' => 'Crear/editar/borrar roles y asignar permisos',
|
||||
],
|
||||
'Informes' => [
|
||||
'view reports' => 'Ver panel de informes',
|
||||
'export reports' => 'Exportar informes',
|
||||
],
|
||||
'Archivos' => [
|
||||
'view media' => 'Ver archivos/galería',
|
||||
'upload media' => 'Subir archivos',
|
||||
'delete media' => 'Eliminar archivos',
|
||||
],
|
||||
'General' => [
|
||||
'manage all' => 'Súper-admin: acceso total al sistema',
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($catalog as $group => $permissions) {
|
||||
foreach ($permissions as $name => $description) {
|
||||
Permission::updateOrCreate(
|
||||
['name' => $name, 'guard_name' => $guard],
|
||||
['group' => $group, 'description' => $description]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
app(PermissionRegistrar::class)->forgetCachedPermissions();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user