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)
{
if(in_array($role->id, [1, 2])) {
return ApiResponse::BAD_REQUEST->response([
'message' => 'No se puede modificar este rol'
]);
}
$role->update($request->all());
return ApiResponse::OK->response();
@ -71,6 +77,11 @@ public function update(RoleUpdateRequest $request, 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();
return ApiResponse::OK->response();

View File

@ -70,6 +70,10 @@
"composer run post-create-project-cmd",
"@php artisan storage:link"
],
"db:update": [
"@php artisan migrate",
"@php artisan migrate --path=database/migrations/data"
],
"db:dev": [
"@php artisan migrate:fresh --seeder=DevSeeder",
"@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
{
$users = PermissionType::firstOrCreate([
$users = PermissionType::updateOrCreate([
'name' => 'Usuarios'
]);
@ -37,9 +37,8 @@ public function run(): void
] = $this->onCRUD('users', $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'
]);
@ -51,7 +50,7 @@ public function run(): void
] = $this->onCRUD('roles', $roles, 'api');
// Arcos
$arcos = PermissionType::firstOrCreate([
$arcos = PermissionType::updateOrCreate([
'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');
//Consulta de vehículo
$vehicles = PermissionType::firstOrCreate([
$vehicles = PermissionType::updateOrCreate([
'name' => 'Gestión de Vehículos'
]);
$vehiclesConsulta = $this->onPermission('vehicles.consultar', 'Consultar vehículo por placa o VIN', $vehicles, 'api');
$vehiclesRecuperar = $this->onPermission('vehicles.recuperar', 'Marcar vehículo como recuperado', $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');
$vehiclesConsultaAlta = $this->onPermission('vehicles.consultar', 'Buscar un vehiculo y darle alta como Robado', $vehicles, 'api');
$vehiclesDetectar = $this->onPermission('vehicles.detectar', 'Historial de búsqueda de vehículo por placa o VIN', $vehicles, 'api');
// Desarrollador
Role::firstOrCreate([
Role::updateOrCreate([
'name' => 'developer',
'description' => 'Desarrollador',
'guard_name' => 'api'
])->syncPermissions(Permission::all());
// Administrador
Role::firstOrCreate([
Role::updateOrCreate([
'name' => 'admin',
'description' => 'Administrador',
'guard_name' => 'api'
@ -97,7 +91,6 @@ public function run(): void
$userEdit,
$userDestroy,
$userSettings,
$userOnline,
$roleIndex,
$roleCreate,
$roleEdit,
@ -108,38 +101,30 @@ public function run(): void
$arcoDestroy,
$arcosToggleEstado,
$arcosDetecciones,
$vehiclesConsulta, //vehicles
$vehiclesRecuperar,
$vehiclesConsultaAlta, //vehicles
$vehiclesDetectar,
);
Role::firstOrCreate([
Role::updateOrCreate([
'name' => 'supervisor',
'description' => 'Supervisor',
'guard_name' => 'api'
])->syncPermissions(
$vehiclesConsulta, //vehicles
$vehiclesRecuperar,
$vehiclesConsultaAlta, //vehicles
$vehiclesDetectar,
$vehiclesRobados,
$vehiclesRecuperados,
$vehiclesDetecciones
);
Role::firstOrCreate([
Role::updateOrCreate([
'name' => 'operador',
'description' => 'Operador',
'guard_name' => 'api'
])->syncPermissions(
$vehiclesConsulta, //vehicles
$vehiclesConsultaAlta, //vehicles
$vehiclesDetectar,
$vehiclesRobados,
$vehiclesRecuperados,
$vehiclesDetecciones
);
Role::firstOrCreate([
Role::updateOrCreate([
'name' => 'investigador',
'description' => 'Investigador',
'guard_name' => 'api'

View File

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