Refactor RoleSeeder to use updateOrCreate for permissions; remove unused vehicle permissions; update docker-compose to remove port mapping; add migration to refresh permissions and seed roles

This commit is contained in:
Juan Felipe Zapata Moreno 2026-03-10 13:01:35 -06:00
parent 27807c1f29
commit 703ccfe1d7
6 changed files with 354 additions and 259 deletions

View File

@ -61,6 +61,12 @@ public function show(Role $role)
*/ */
public function update(RoleUpdateRequest $request, Role $role) public function update(RoleUpdateRequest $request, Role $role)
{ {
if(in_array($role->id, [1, 2])) {
return ApiResponse::BAD_REQUEST->response([
'message' => 'No se puede modificar este rol'
]);
}
$role->update($request->all()); $role->update($request->all());
return ApiResponse::OK->response(); return ApiResponse::OK->response();
@ -71,6 +77,11 @@ public function update(RoleUpdateRequest $request, Role $role)
*/ */
public function destroy(Role $role) public function destroy(Role $role)
{ {
if(in_array($role->id, [1, 2])) {
return ApiResponse::BAD_REQUEST->response([
'message' => 'No se puede eliminar este rol'
]);
}
$role->delete(); $role->delete();
return ApiResponse::OK->response(); return ApiResponse::OK->response();

View File

@ -70,6 +70,10 @@
"composer run post-create-project-cmd", "composer run post-create-project-cmd",
"@php artisan storage:link" "@php artisan storage:link"
], ],
"db:update": [
"@php artisan migrate",
"@php artisan migrate --path=database/migrations/data"
],
"db:dev": [ "db:dev": [
"@php artisan migrate:fresh --seeder=DevSeeder", "@php artisan migrate:fresh --seeder=DevSeeder",
"@php artisan passport:client --personal --name=Holos" "@php artisan passport:client --personal --name=Holos"

519
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('role_has_permissions')->truncate();
DB::table('model_has_permissions')->truncate();
\Spatie\Permission\Models\Permission::truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
Artisan::call('db:seed', ['--class' => 'RoleSeeder', '--force' => true]);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
//
}
};

View File

@ -25,7 +25,7 @@ class RoleSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
$users = PermissionType::firstOrCreate([ $users = PermissionType::updateOrCreate([
'name' => 'Usuarios' 'name' => 'Usuarios'
]); ]);
@ -37,9 +37,8 @@ public function run(): void
] = $this->onCRUD('users', $users, 'api'); ] = $this->onCRUD('users', $users, 'api');
$userSettings = $this->onPermission('users.settings', 'Configuración de usuarios', $users, 'api'); $userSettings = $this->onPermission('users.settings', 'Configuración de usuarios', $users, 'api');
$userOnline = $this->onPermission('users.online', 'Usuarios en linea', $users, 'api');
$roles = PermissionType::firstOrCreate([ $roles = PermissionType::updateOrCreate([
'name' => 'Roles' 'name' => 'Roles'
]); ]);
@ -51,7 +50,7 @@ public function run(): void
] = $this->onCRUD('roles', $roles, 'api'); ] = $this->onCRUD('roles', $roles, 'api');
// Arcos // Arcos
$arcos = PermissionType::firstOrCreate([ $arcos = PermissionType::updateOrCreate([
'name' => 'Gestión de Arcos' 'name' => 'Gestión de Arcos'
]); ]);
@ -66,28 +65,23 @@ public function run(): void
$arcosDetecciones = $this->onPermission('arcos.detecciones.dia', 'Ver detecciones del día de un arco', $arcos, 'api'); $arcosDetecciones = $this->onPermission('arcos.detecciones.dia', 'Ver detecciones del día de un arco', $arcos, 'api');
//Consulta de vehículo //Consulta de vehículo
$vehicles = PermissionType::firstOrCreate([ $vehicles = PermissionType::updateOrCreate([
'name' => 'Gestión de Vehículos' 'name' => 'Gestión de Vehículos'
]); ]);
$vehiclesConsulta = $this->onPermission('vehicles.consultar', 'Consultar vehículo por placa o VIN', $vehicles, 'api'); $vehiclesConsultaAlta = $this->onPermission('vehicles.consultar', 'Buscar un vehiculo y darle alta como Robado', $vehicles, 'api');
$vehiclesRecuperar = $this->onPermission('vehicles.recuperar', 'Marcar vehículo como recuperado', $vehicles, 'api'); $vehiclesDetectar = $this->onPermission('vehicles.detectar', 'Historial de búsqueda de vehículo por placa o VIN', $vehicles, 'api');
$vehiclesDetectar = $this->onPermission('vehicles.detectar', 'Buscar vehículo por placa o VIN', $vehicles, 'api');
$vehiclesRobados = $this->onPermission('vehicles.robados', 'Listar vehículos robados', $vehicles, 'api');
$vehiclesRecuperados = $this->onPermission('vehicles.recuperados', 'Listar vehículos recuperados', $vehicles, 'api');
$vehiclesDetecciones = $this->onPermission('vehicles.detecciones', 'Listar todas las detecciones', $vehicles, 'api');
// Desarrollador // Desarrollador
Role::firstOrCreate([ Role::updateOrCreate([
'name' => 'developer', 'name' => 'developer',
'description' => 'Desarrollador', 'description' => 'Desarrollador',
'guard_name' => 'api' 'guard_name' => 'api'
])->syncPermissions(Permission::all()); ])->syncPermissions(Permission::all());
// Administrador // Administrador
Role::firstOrCreate([ Role::updateOrCreate([
'name' => 'admin', 'name' => 'admin',
'description' => 'Administrador', 'description' => 'Administrador',
'guard_name' => 'api' 'guard_name' => 'api'
@ -97,7 +91,6 @@ public function run(): void
$userEdit, $userEdit,
$userDestroy, $userDestroy,
$userSettings, $userSettings,
$userOnline,
$roleIndex, $roleIndex,
$roleCreate, $roleCreate,
$roleEdit, $roleEdit,
@ -108,38 +101,30 @@ public function run(): void
$arcoDestroy, $arcoDestroy,
$arcosToggleEstado, $arcosToggleEstado,
$arcosDetecciones, $arcosDetecciones,
$vehiclesConsulta, //vehicles $vehiclesConsultaAlta, //vehicles
$vehiclesRecuperar,
$vehiclesDetectar, $vehiclesDetectar,
); );
Role::firstOrCreate([ Role::updateOrCreate([
'name' => 'supervisor', 'name' => 'supervisor',
'description' => 'Supervisor', 'description' => 'Supervisor',
'guard_name' => 'api' 'guard_name' => 'api'
])->syncPermissions( ])->syncPermissions(
$vehiclesConsulta, //vehicles $vehiclesConsultaAlta, //vehicles
$vehiclesRecuperar,
$vehiclesDetectar, $vehiclesDetectar,
$vehiclesRobados,
$vehiclesRecuperados,
$vehiclesDetecciones
); );
Role::firstOrCreate([ Role::updateOrCreate([
'name' => 'operador', 'name' => 'operador',
'description' => 'Operador', 'description' => 'Operador',
'guard_name' => 'api' 'guard_name' => 'api'
])->syncPermissions( ])->syncPermissions(
$vehiclesConsulta, //vehicles $vehiclesConsultaAlta, //vehicles
$vehiclesDetectar, $vehiclesDetectar,
$vehiclesRobados,
$vehiclesRecuperados,
$vehiclesDetecciones
); );
Role::firstOrCreate([ Role::updateOrCreate([
'name' => 'investigador', 'name' => 'investigador',
'description' => 'Investigador', 'description' => 'Investigador',
'guard_name' => 'api' 'guard_name' => 'api'

View File

@ -13,8 +13,6 @@ services:
- DB_PASSWORD=${DB_PASSWORD} - DB_PASSWORD=${DB_PASSWORD}
- DB_DATABASE=${DB_DATABASE} - DB_DATABASE=${DB_DATABASE}
- DB_PORT=${DB_PORT} - DB_PORT=${DB_PORT}
ports:
- "8083:8080"
volumes: volumes:
- ./:/var/www/arcos-backend - ./:/var/www/arcos-backend
- ./vendor:/var/www/arcos/vendor - ./vendor:/var/www/arcos/vendor