@@ -6,8 +6,10 @@ use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Support\Arr; use Illuminate\Support\Str;+use Leantime\Core\Auth\Permissions\RequiresPermission; use Leantime\Core\Events\DispatchesEvents; use Leantime\Domain\Api\Contracts\StaticAssetType;+use Leantime\Domain\Api\Permissions\ApiPermissions; use Leantime\Domain\Api\Repositories\Api as ApiRepository; use Leantime\Domain\Auth\Services\UserSessionBuilder; use Leantime\Domain\Menu\Repositories\Menu as MenuRepository;
Show 1 hidden lines
@@ -120,6 +122,7 @@ public function setApiUserSession(array $user, bool $isExternalAuth = false)
* * @api */+ #[RequiresPermission(ApiPermissions::MANAGE, global: true)] public function createAPIKey(array $values): bool|array { $user = $this->randomStr(32);
Show 1 hidden lines
@@ -148,6 +151,7 @@ public function createAPIKey(array $values): bool|array
* * @api */+ #[RequiresPermission(ApiPermissions::MANAGE, global: true)] public function getApiKeyFormValues(int $id): array { if ($id <= 0) {
Show 1 hidden lines
@@ -186,6 +190,7 @@ public function getApiKeyFormValues(int $id): array
* * @api */+ #[RequiresPermission(ApiPermissions::MANAGE, global: true)] public function updateApiKey(int $id, array $postValues, ?array $projects): bool { if ($id <= 0) {
Show 1 hidden lines
@@ -227,6 +232,7 @@ public function updateApiKey(int $id, array $postValues, ?array $projects): bool
* * @api */+ #[RequiresPermission(ApiPermissions::MANAGE, global: true)] public function createApiKeyWithProjects(array $values, ?array $projects): array|false { $apiKeyValues = $this->createAPIKey($values);
Show 1 hidden lines
@@ -270,6 +276,7 @@ private function reconcileProjectRelations(int $id, ?array $projects): void
* * @api */+ #[RequiresPermission(ApiPermissions::MANAGE, global: true)] public function getProjectRelationIds(int $id): array { $projects = $this->projectRepo->getUserProjectRelation($id);
Show 1 hidden lines
@@ -322,6 +329,7 @@ public function generateFormToken(): void
* * @api */+ #[RequiresPermission(ApiPermissions::MANAGE, global: true)] public function getAPIKeys(): false|array { $keys = $this->userRepo->getAllBySource('api');
The fix adds #[RequiresPermission(ApiPermissions::MANAGE, global: true)] to createAPIKey and createApiKeyWithProjects, along with related key-management methods. This closes the JSON-RPC gap by requiring a company-wide API-key management permission before these @api methods run.