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,12 +21,12 @@ class ModuleController extends Controller implements HasMiddleware
public static function middleware(): array
{
return [
self::can('modules.index', ['index']),
self::can('modules.show', ['show']),
self::can('modules.destroy', ['destroy']),
self::can('modules.toggle_status', ['toggleStatus']),
self::can('module.index', ['index']),
self::can('module.show', ['show']),
self::can('module.destroy', ['destroy']),
self::can('module.toggle_status', ['toggleStatus']),
];
}
}
/**
* Listar módulos existentes

View File

@ -8,13 +8,19 @@
use App\Helpers\EncryptionHelper;
use App\Enums\SettingTypeEk;
use Illuminate\Http\Request;
use Illuminate\Routing\Controllers\HasMiddleware;
/**
* 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()
{
@ -36,11 +42,48 @@ public function show()
'success' => true,
'data' => [
'username' => $credentials['username'] ?? '',
'password' => $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)
{
$validated = $request->validate([

View File

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

View File

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

View File

@ -58,9 +58,10 @@ public function run(): void
$moduleCreate,
$moduleEdit,
$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 ===
$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');
// === SISTEMA ===
$system = PermissionType::firstOrCreate(['name' => 'Sistema']);
$systemSettings = $this->onPermission('system.settings', 'Configurar credenciales REPUVE', $system, 'api');
// === ACTUALIZAR REGISTRO ===
$updates = PermissionType::firstOrCreate(['name' => 'Actualizar Registro']);
@ -159,9 +165,11 @@ public function run(): void
// Roles
$roleIndex, $roleCreate, $roleEdit, $roleDestroy, $rolePermissions,
// Módulos
$moduleIndex, $moduleCreate, $moduleEdit, $moduleDestroy, $moduleToggleStatus,
$moduleIndex, $moduleCreate, $moduleEdit, $moduleDestroy, $moduleShow, $moduleToggleStatus,
// Dispositivos
$deviceIndex, $deviceCreate, $deviceEdit, $deviceDestroy, $deviceToggleStatus,
// Sistema
$systemSettings,
// Inscripciones
$inscriptionVehicle, $inscriptionSearch, $inscriptionSearchNational,
// Cancelaciones

View File

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

View File

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