Files
breadcrumb-the-shire/pages/api/v1/permissions/index().php
2026-03-04 15:56:58 +01:00

49 lines
1.5 KiB
PHP

<?php
use MintyPHP\Http\ApiBootstrap;
use MintyPHP\Http\ApiResponse;
use MintyPHP\Service\Access\AccessServicesFactory;
ApiBootstrap::init();
ApiResponse::requireMethod('GET');
ApiResponse::requireAbility(\MintyPHP\Service\Access\OperationsAuthorizationPolicy::ABILITY_API_PERMISSIONS_VIEW);
$request = requestInput();
$permissionService = (app(AccessServicesFactory::class))->createPermissionService();
$allowedOrders = ['key', 'description', 'active', 'created'];
$orderParam = $request->queryString('order');
$dirParam = strtolower($request->queryString('dir'));
$order = in_array($orderParam, $allowedOrders, true) ? $orderParam : 'key';
$dir = in_array($dirParam, ['asc', 'desc'], true) ? $dirParam : 'asc';
$limit = max(1, min(100, $request->queryInt('limit', 25)));
$offset = max(0, $request->queryInt('offset', 0));
$options = [
'limit' => $limit,
'offset' => $offset,
'search' => $request->queryString('search'),
'active' => $request->query('active'),
'order' => $order,
'dir' => $dir,
];
$result = $permissionService->listPaged($options);
$rows = [];
foreach (($result['rows'] ?? []) as $row) {
$rows[] = [
'key' => $row['key'] ?? '',
'description' => $row['description'] ?? '',
'active' => (bool) ($row['active'] ?? 1),
'is_system' => (bool) ($row['is_system'] ?? 0),
];
}
ApiResponse::success([
'data' => $rows,
'total' => $result['total'] ?? 0,
'limit' => $limit,
'offset' => $offset,
]);