Switch over to resource-based key DB structure

This commit is contained in:
Matej Bačo
2025-12-19 13:40:32 +01:00
parent 0a3877a900
commit 69d5ce0f55
6 changed files with 21 additions and 12 deletions
+1 -1
View File
@@ -653,7 +653,7 @@ return [
'default' => null,
'array' => false,
'filters' => []
],
],
[
'$id' => ID::custom('name'),
'type' => Database::VAR_STRING,
+11 -6
View File
@@ -1497,8 +1497,9 @@ App::post('/v1/projects/:projectId/keys')
Permission::update(Role::any()),
Permission::delete(Role::any()),
],
'projectInternalId' => $project->getSequence(),
'projectId' => $project->getId(),
'resourceInternalId' => $project->getSequence(),
'resourceId' => $project->getId(),
'resourceType' => 'projects',
'name' => $name,
'scopes' => $scopes,
'expire' => $expire,
@@ -1546,7 +1547,8 @@ App::get('/v1/projects/:projectId/keys')
}
$keys = $dbForPlatform->find('keys', [
Query::equal('projectInternalId', [$project->getSequence()]),
Query::equal('resourceInternalId', [$project->getSequence()]),
Query::equal('resourceType', ['projects']),
Query::limit(5000),
]);
@@ -1587,7 +1589,8 @@ App::get('/v1/projects/:projectId/keys/:keyId')
$key = $dbForPlatform->findOne('keys', [
Query::equal('$id', [$keyId]),
Query::equal('projectInternalId', [$project->getSequence()]),
Query::equal('resourceInternalId', [$project->getSequence()]),
Query::equal('resourceType', ['projects']),
]);
if ($key->isEmpty()) {
@@ -1631,7 +1634,8 @@ App::put('/v1/projects/:projectId/keys/:keyId')
$key = $dbForPlatform->findOne('keys', [
Query::equal('$id', [$keyId]),
Query::equal('projectInternalId', [$project->getSequence()]),
Query::equal('resourceInternalId', [$project->getSequence()]),
Query::equal('resourceType', ['projects']),
]);
if ($key->isEmpty()) {
@@ -1682,7 +1686,8 @@ App::delete('/v1/projects/:projectId/keys/:keyId')
$key = $dbForPlatform->findOne('keys', [
Query::equal('$id', [$keyId]),
Query::equal('projectInternalId', [$project->getSequence()]),
Query::equal('resourceInternalId', [$project->getSequence()]),
Query::equal('resourceType', ['projects']),
]);
if ($key->isEmpty()) {
+3 -2
View File
@@ -200,8 +200,9 @@ App::post('/v1/mock/api-key-unprefixed')
Permission::update(Role::any()),
Permission::delete(Role::any()),
],
'projectInternalId' => $project->getSequence(),
'projectId' => $project->getId(),
'resourceType' => 'projects',
'resourceInternalId' => $project->getSequence(),
'resourceId' => $project->getId(),
'name' => 'Outdated key',
'scopes' => $scopes,
'expire' => null,
+2 -1
View File
@@ -135,7 +135,8 @@ Database::addFilter(
function (mixed $value, Document $document, Database $database) {
return $database->getAuthorization()->skip(fn () => $database
->find('keys', [
Query::equal('projectInternalId', [$document->getSequence()]),
Query::equal('resourceInternalId', [$document->getSequence()]),
Query::equal('resourceType', ['projects']),
Query::limit(APP_LIMIT_SUBQUERY),
]));
}
+2 -1
View File
@@ -562,7 +562,8 @@ class Deletes extends Action
// Delete Keys
$this->deleteByGroup('keys', [
Query::equal('projectInternalId', [$projectInternalId]),
Query::equal('resourceInternalId', [$projectInternalId]),
Query::equal('resourceType', ['projects']),
Query::orderAsc()
], $dbForPlatform);
@@ -111,7 +111,8 @@ class StatsResources extends Action
Query::equal('projectInternalId', [$project->getSequence()])
]);
$keys = $dbForPlatform->count('keys', [
Query::equal('projectInternalId', [$project->getSequence()])
Query::equal('resourceInternalId', [$project->getSequence()]),
Query::equal('resourceType', ['projects']),
]);
$domains = $dbForPlatform->count('rules', [