240 lines
9.7 KiB
PHP

<?php
namespace Database\Seeders;
/**
* @copyright (c) 2025 Notsoweb Software (https://notsoweb.com) - All Rights Reserved
*/
use App\Models\PermissionType;
use App\Models\Role;
use Illuminate\Database\Seeder;
use Notsoweb\LaravelCore\Traits\MySql\RolePermission;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\PermissionRegistrar;
/**
* Roles y permisos
*
* @author Moisés Cortés C. <moises.cortes@notsoweb.com>
*
* @version 1.0.0
*/
class RoleSeeder extends Seeder
{
use RolePermission;
/**
* Run the database seeds.
*/
public function run(): void
{
// === USUARIOS ===
$users = PermissionType::updateOrCreate(['name' => 'Usuarios']);
[
$userIndex,
$userCreate,
$userEdit,
$userDestroy
] = $this->onCRUD('users', $users, 'api');
// === ROLES ===
$roles = PermissionType::updateOrCreate(['name' => 'Roles']);
[
$roleIndex,
$roleCreate,
$roleEdit,
$roleDestroy
] = $this->onCRUD('roles', $roles, 'api');
$rolePermissions = $this->onPermission('roles.permissions', 'Permisos de roles', $roles, 'api');
// === APK ===
$apk = PermissionType::updateOrCreate(['name' => 'App Móvil']);
$apkIndex = $this->onPermission('apk.index', 'Historial de registros apk', $apk, 'api');
$apkCreate = $this->onPermission('apk.create', 'Subir nueva versión del apk', $apk, 'api');
$apkEdit = $this->onPermission('apk.edit', 'Actualizar registro de apk', $apk, 'api');
$apkDestroy = $this->onPermission('apk.destroy', 'Eliminar registro de apk', $apk, 'api');
$apkDownload = $this->onPermission('apk.download', 'Descargar APK de la aplicación móvil', $apk, 'api');
// === MÓDULOS ===
$modules = PermissionType::updateOrCreate(['name' => 'Módulos']);
[
$moduleIndex,
$moduleCreate,
$moduleEdit,
$moduleDestroy
] = $this->onCRUD('modules', $modules, 'api');
$moduleShow = $this->onPermission('modules.show', 'Ver módulo', $modules, 'api');
$moduleToggleStatus = $this->onPermission('modules.toggle_status', 'Cambiar estado del módulo', $modules, 'api');
// === DISPOSITIVOS MÓVILES ===
$devices = PermissionType::updateOrCreate(['name' => 'Dispositivos Móviles']);
[
$deviceIndex,
$deviceCreate,
$deviceEdit,
$deviceDestroy
] = $this->onCRUD('devices', $devices, 'api');
$deviceToggleStatus = $this->onPermission('devices.toggle_status', 'Cambiar estado del dispositivo', $devices, 'api');
// === INSCRIPCIONES ===
$inscriptions = PermissionType::updateOrCreate(['name' => 'Proceso de Sustitución por primera vez']);
$inscriptionSearchNational = $this->onPermission('inscription.search.national', 'Buscar en consulta nacional', $inscriptions, 'api');
$inscriptionSearch = $this->onPermission('inscription.search', 'Buscar en consulta', $inscriptions, 'api');
// === CANCELACIONES ===
$cancellations = PermissionType::updateOrCreate(['name' => 'Cancelaciones']);
$cancellationTagNoAsignado = $this->onPermission('cancellations.cancel_tag_no_asignado', 'Cancelar constancia no asignada', $cancellations, 'api');
// === SISTEMA ===
$system = PermissionType::updateOrCreate(['name' => 'Sistema']);
$systemSettings = $this->onPermission('system.settings', 'Configurar credenciales REPUVE', $system, 'api');
// === ACTUALIZAR REGISTRO ===
$updates = PermissionType::updateOrCreate(['name' => 'Enviar registros a REPUVE Nacional']);
$updateVehicleData = $this->onPermission('updates.vehicle-data', 'Actualizar datos de vehículo por formulario', $updates, 'api');
$updateResendToRepuve = $this->onPermission('updates.resend-to-repuve', 'Reenviar a REPUVE', $updates, 'api');
// === GENERAR FORMATOS ===
$formats = PermissionType::updateOrCreate(['name' => 'Generar Formatos']);
$recordGeneratePdf = $this->onPermission('records.generate_pdf', 'Generar Hoja de recepción', $formats, 'api');
$recordGeneratePdfForm = $this->onPermission('records.generate_pdf_form', 'Generar solicitud de sustitución', $formats, 'api');
$recordGeneratePdfVerification = $this->onPermission('records.generate_pdf_verification', 'Generar Hoja de verificación', $formats, 'api');
$recordGeneratePdfConstancia = $this->onPermission('records.generate_pdf_constancia', 'Generar Impresión en la constancia', $formats, 'api');
// === REPORTES ===
$reports = PermissionType::updateOrCreate(['name' => 'Reportes - Excel']);
$reportVehicleUpdates = $this->onPermission('reports.vehicle_updates.index', 'Reporte de actualizaciones', $reports, 'api');
$reportSubstitutions = $this->onPermission('reports.substitutions.index', 'Reporte de sustituciones', $reports, 'api');
$reportCancellations = $this->onPermission('reports.cancellations.index', 'Reporte de cancelaciones', $reports, 'api');
$reportGeneral = $this->onPermission('reports.general.index', 'Reporte general', $reports, 'api');
$reportSearchRecords = $this->onPermission('reports.search_records.index', 'Reporte de consulta nacional', $reports, 'api');
// === ACTIVIDAD ===
$activities = PermissionType::updateOrCreate(['name' => 'Actividad']);
$activityIndex = $this->onPermission('activities.index', 'Ver actividad de usuarios', $activities, 'api');
// === CAJAS ===
$packages = PermissionType::updateOrCreate(['name' => 'Cajas']);
[
$packageIndex,
$packageCreate,
$packageEdit,
$packageDestroy
] = $this->onCRUD('packages', $packages, 'api');
$packageBoxTags = $this->onPermission('packages.box_tags', 'Ver constancias de caja', $packages, 'api');
// === CONSTANCIAS DE INSCRIPCIÓN ===
$tags = PermissionType::updateOrCreate(['name' => 'Constancias de Inscripción']);
[
$tagIndex,
$tagCreate,
$tagEdit,
$tagDestroy,
] = $this->onCRUD('tags', $tags, 'api');
$tagAssignToModule = $this->onPermission('tags.assign_to_module', 'Asignar etiquetas a módulo', $tags, 'api');
// =========================================================
// ROLES
// =========================================================
// Desarrollador
Role::updateOrCreate([
'name' => 'developer',
'guard_name' => 'api'
], ['description' => 'Desarrollador'])->syncPermissions(Permission::all());
// Administrador
Role::updateOrCreate([
'name' => 'admin',
'guard_name' => 'api'
], ['description' => 'Administrador'])->syncPermissions(
// Usuarios
$userIndex, $userCreate, $userEdit, $userDestroy,
// Roles
$roleIndex, $roleCreate, $roleEdit, $roleDestroy, $rolePermissions,
// Módulos
$moduleIndex, $moduleCreate, $moduleEdit, $moduleDestroy, $moduleShow, $moduleToggleStatus,
// Dispositivos
$deviceIndex, $deviceCreate, $deviceEdit, $deviceDestroy, $deviceToggleStatus,
// Sistema
$systemSettings,
// Inscripciones
$inscriptionSearch, $inscriptionSearchNational,
// Cancelaciones
$cancellationTagNoAsignado,
// Actualizaciones
$updateVehicleData, $updateResendToRepuve,
// Generar formatos
$recordGeneratePdf, $recordGeneratePdfVerification, $recordGeneratePdfConstancia, $recordGeneratePdfForm,
// Reportes
$reportVehicleUpdates, $reportSubstitutions, $reportCancellations,
$reportGeneral, $reportSearchRecords,
// Cajas
$packageIndex, $packageCreate, $packageEdit, $packageDestroy, $packageBoxTags,
// Constancias
$tagIndex, $tagCreate, $tagEdit, $tagDestroy,
//app
$apkIndex, $apkEdit, $apkDestroy, $apkDownload,
);
// Encargado
Role::updateOrCreate([
'name' => 'encargado',
'guard_name' => 'api'
], ['description' => 'Encargado'])->syncPermissions(
// Dispositivos
$deviceIndex, $deviceCreate, $deviceEdit, $deviceDestroy, $deviceToggleStatus,
// Inscripciones
$inscriptionSearch, $inscriptionSearchNational,
// Cancelaciones
$cancellationTagNoAsignado,
// Actualizaciones
$updateVehicleData,
// Generar formatos
$recordGeneratePdf, $recordGeneratePdfVerification, $recordGeneratePdfConstancia, $recordGeneratePdfForm,
// Reportes
$reportVehicleUpdates, $reportSubstitutions, $reportCancellations,
$reportGeneral, $reportSearchRecords,
// Cajas
$packageIndex, $packageCreate, $packageEdit, $packageDestroy, $packageBoxTags,
// Constancias
$tagIndex, $tagCreate, $tagEdit, $tagDestroy, $tagAssignToModule,
//app
$apkDownload,
);
// Perito
Role::updateOrCreate([
'name' => 'perito',
'guard_name' => 'api'
], ['description' => 'Perito'])->syncPermissions(
// Generar formatos
$recordGeneratePdf, $recordGeneratePdfVerification, $recordGeneratePdfConstancia, $recordGeneratePdfForm,
// Cajas
$packageIndex, $packageBoxTags,
// Constancias
$tagIndex,
);
}
}