feat: actualiza controladores y solicitudes para unificar permisos y agrega método de desencriptación en SettingsController

This commit is contained in:
Juan Felipe Zapata Moreno 2026-02-26 14:30:18 -06:00
parent ad6b19e9dd
commit 4c417be38c
7 changed files with 66 additions and 14 deletions

View File

@ -21,10 +21,10 @@ class ModuleController extends Controller implements HasMiddleware
public static function middleware(): array public static function middleware(): array
{ {
return [ return [
self::can('modules.index', ['index']), self::can('module.index', ['index']),
self::can('modules.show', ['show']), self::can('module.show', ['show']),
self::can('modules.destroy', ['destroy']), self::can('module.destroy', ['destroy']),
self::can('modules.toggle_status', ['toggleStatus']), self::can('module.toggle_status', ['toggleStatus']),
]; ];
} }

View File

@ -8,13 +8,19 @@
use App\Helpers\EncryptionHelper; use App\Helpers\EncryptionHelper;
use App\Enums\SettingTypeEk; use App\Enums\SettingTypeEk;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controllers\HasMiddleware;
/** /**
* Descripción * Descripción
*/ */
class SettingsController extends Controller class SettingsController extends Controller implements HasMiddleware
{ {
public static function middleware(): array
{
return [
self::can('system.settings', ['show', 'update']),
];
}
public function show() public function show()
{ {
@ -36,11 +42,48 @@ public function show()
'success' => true, 'success' => true,
'data' => [ 'data' => [
'username' => $credentials['username'] ?? '', 'username' => $credentials['username'] ?? '',
'password' => $credentials['password'] ?? '',
'password_exists' => !empty($credentials['password']) 'password_exists' => !empty($credentials['password'])
] ]
]); ]);
} }
public function decrypt(Request $request)
{
$request->validate([
'value' => 'required|string',
'app_key' => 'nullable|string',
]);
if ($request->filled('app_key')) {
try {
$rawKey = base64_decode(str_replace('base64:', '', $request->app_key));
$encrypter = new \Illuminate\Encryption\Encrypter($rawKey, 'AES-256-CBC');
$credentials = json_decode($encrypter->decryptString($request->value), true);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'No se pudo desencriptar con el APP_KEY proporcionado',
'error' => $e->getMessage(),
], 422);
}
} else {
$credentials = EncryptionHelper::decryptData($request->value);
}
if (!$credentials) {
return response()->json([
'success' => false,
'message' => 'No se pudo desencriptar el valor proporcionado',
], 422);
}
return response()->json([
'success' => true,
'data' => $credentials,
]);
}
public function update(Request $request) public function update(Request $request)
{ {
$validated = $request->validate([ $validated = $request->validate([

View File

@ -9,7 +9,7 @@ class ModuleStoreRequest extends FormRequest
{ {
public function authorize(): bool public function authorize(): bool
{ {
return auth()->user()->can('modules.create'); return auth()->user()->can('module.create');
} }
public function rules(): array public function rules(): array

View File

@ -9,7 +9,7 @@ class ModuleUpdateRequest extends FormRequest
{ {
public function authorize(): bool public function authorize(): bool
{ {
return auth()->user()->can('modules.edit'); return auth()->user()->can('module.edit');
} }
public function rules(): array public function rules(): array

View File

@ -58,9 +58,10 @@ public function run(): void
$moduleCreate, $moduleCreate,
$moduleEdit, $moduleEdit,
$moduleDestroy $moduleDestroy
] = $this->onCRUD('modules', $modules, 'api'); ] = $this->onCRUD('module', $modules, 'api');
$moduleToggleStatus = $this->onPermission('modules.toggle_status', 'Cambiar estado del módulo', $modules, 'api'); $moduleShow = $this->onPermission('module.show', 'Ver módulo', $modules, 'api');
$moduleToggleStatus = $this->onPermission('module.toggle_status', 'Cambiar estado del módulo', $modules, 'api');
// === DISPOSITIVOS MÓVILES === // === DISPOSITIVOS MÓVILES ===
$devices = PermissionType::firstOrCreate(['name' => 'Dispositivos Móviles']); $devices = PermissionType::firstOrCreate(['name' => 'Dispositivos Móviles']);
@ -86,6 +87,11 @@ public function run(): void
$cancellationTagNoAsignado = $this->onPermission('cancellations.cancel_tag_no_asignado', 'Cancelar constancia no asignada', $cancellations, 'api'); $cancellationTagNoAsignado = $this->onPermission('cancellations.cancel_tag_no_asignado', 'Cancelar constancia no asignada', $cancellations, 'api');
// === SISTEMA ===
$system = PermissionType::firstOrCreate(['name' => 'Sistema']);
$systemSettings = $this->onPermission('system.settings', 'Configurar credenciales REPUVE', $system, 'api');
// === ACTUALIZAR REGISTRO === // === ACTUALIZAR REGISTRO ===
$updates = PermissionType::firstOrCreate(['name' => 'Actualizar Registro']); $updates = PermissionType::firstOrCreate(['name' => 'Actualizar Registro']);
@ -159,9 +165,11 @@ public function run(): void
// Roles // Roles
$roleIndex, $roleCreate, $roleEdit, $roleDestroy, $rolePermissions, $roleIndex, $roleCreate, $roleEdit, $roleDestroy, $rolePermissions,
// Módulos // Módulos
$moduleIndex, $moduleCreate, $moduleEdit, $moduleDestroy, $moduleToggleStatus, $moduleIndex, $moduleCreate, $moduleEdit, $moduleDestroy, $moduleShow, $moduleToggleStatus,
// Dispositivos // Dispositivos
$deviceIndex, $deviceCreate, $deviceEdit, $deviceDestroy, $deviceToggleStatus, $deviceIndex, $deviceCreate, $deviceEdit, $deviceDestroy, $deviceToggleStatus,
// Sistema
$systemSettings,
// Inscripciones // Inscripciones
$inscriptionVehicle, $inscriptionSearch, $inscriptionSearchNational, $inscriptionVehicle, $inscriptionSearch, $inscriptionSearchNational,
// Cancelaciones // Cancelaciones

View File

@ -50,7 +50,7 @@ services:
MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME} MYSQL_USER: ${DB_USERNAME}
ports: ports:
- ${DB_PORT}:${DB_PORT} - ${DB_PORT}:3306
volumes: volumes:
- mysql_data:/var/lib/mysql - mysql_data:/var/lib/mysql
networks: networks:

View File

@ -90,6 +90,7 @@
//Ruta de encriptación de RepuveService //Ruta de encriptación de RepuveService
Route::get('repuve-credentials', [SettingsController::class, 'show']); Route::get('repuve-credentials', [SettingsController::class, 'show']);
Route::put('repuve-credentials', [SettingsController::class, 'update']); Route::put('repuve-credentials', [SettingsController::class, 'update']);
Route::post('repuve-credentials/decrypt', [SettingsController::class, 'decrypt']);
}); });