From 60d2faf2f6e605a429c0dc7bb29eecc10c7e2bbd Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sat, 15 Mar 2025 10:49:27 +0100 Subject: [PATCH] Fixed api key edit --- .../api_graphql/mutations/api_key_mutation.py | 2 +- .../data/schemas/administration/api_key.py | 2 +- .../permission/api_key_permission_dao.py | 8 +- api/src/data/seeder/permission_seeder.py | 2 +- web/src/app/model/entities/api-key.ts | 4 +- .../api-keys/api-keys.data.service.ts | 16 ++- .../api-key-form-page.component.html | 120 +++++++++--------- .../form-page/api-key-form-page.component.ts | 23 ++-- 8 files changed, 94 insertions(+), 83 deletions(-) diff --git a/api/src/api_graphql/mutations/api_key_mutation.py b/api/src/api_graphql/mutations/api_key_mutation.py index ff5fb06..b3bcf5f 100644 --- a/api/src/api_graphql/mutations/api_key_mutation.py +++ b/api/src/api_graphql/mutations/api_key_mutation.py @@ -63,7 +63,7 @@ class APIKeyMutation(MutationABC): if obj.permissions is not None: permissions = [ - x for x in await apiKeyPermissionDao.get_by_role_id(api_key.id) + x for x in await apiKeyPermissionDao.find_by_api_key_id(api_key.id) ] to_delete = ( diff --git a/api/src/data/schemas/administration/api_key.py b/api/src/data/schemas/administration/api_key.py index 944f844..3e3d9a2 100644 --- a/api/src/data/schemas/administration/api_key.py +++ b/api/src/data/schemas/administration/api_key.py @@ -40,7 +40,7 @@ class ApiKey(DbModelABC): return [ await x.permission - for x in await apiKeyPermissionDao.get_by_api_key_id(self.id) + for x in await apiKeyPermissionDao.find_by_api_key_id(self.id) ] async def has_permission(self, permission: Permissions) -> bool: diff --git a/api/src/data/schemas/permission/api_key_permission_dao.py b/api/src/data/schemas/permission/api_key_permission_dao.py index 77da9bb..0852c24 100644 --- a/api/src/data/schemas/permission/api_key_permission_dao.py +++ b/api/src/data/schemas/permission/api_key_permission_dao.py @@ -15,23 +15,23 @@ class ApiKeyPermissionDao(DbModelDaoABC[ApiKeyPermission]): self.attribute(ApiKeyPermission.api_key_id, int) self.attribute(ApiKeyPermission.permission_id, int) - async def get_by_api_key_id( + async def find_by_api_key_id( self, api_key_id: int, with_deleted=False ) -> list[ApiKeyPermission]: f = [{ApiKeyPermission.api_key_id: api_key_id}] if not with_deleted: f.append({ApiKeyPermission.deleted: False}) - return await self.get_by(f) + return await self.find_by(f) - async def get_by_permission_id( + async def find_by_permission_id( self, permission_id: int, with_deleted=False ) -> list[ApiKeyPermission]: f = [{ApiKeyPermission.permission_id: permission_id}] if not with_deleted: f.append({ApiKeyPermission.deleted: False}) - return await self.get_by(f) + return await self.find_by(f) apiKeyPermissionDao = ApiKeyPermissionDao() diff --git a/api/src/data/seeder/permission_seeder.py b/api/src/data/seeder/permission_seeder.py index 9fabe4f..72ec6e8 100644 --- a/api/src/data/seeder/permission_seeder.py +++ b/api/src/data/seeder/permission_seeder.py @@ -71,7 +71,7 @@ class PermissionSeeder(DataSeederABC): if admin_api_key is None: return - admin_permissions = await apiKeyPermissionDao.get_by_api_key_id( + admin_permissions = await apiKeyPermissionDao.find_by_api_key_id( admin_api_key.id, with_deleted=True ) to_assign = [ diff --git a/web/src/app/model/entities/api-key.ts b/web/src/app/model/entities/api-key.ts index 987f5c0..3b8c69a 100644 --- a/web/src/app/model/entities/api-key.ts +++ b/web/src/app/model/entities/api-key.ts @@ -1,5 +1,5 @@ -import { DbModel } from "src/app/model/entities/db-model"; -import { Permission } from "src/app/model/entities/role"; +import { DbModel } from 'src/app/model/entities/db-model'; +import { Permission } from 'src/app/model/entities/role'; export interface ApiKey extends DbModel { identifier?: string; diff --git a/web/src/app/modules/admin/administration/api-keys/api-keys.data.service.ts b/web/src/app/modules/admin/administration/api-keys/api-keys.data.service.ts index 3c0c1cd..24b6bf9 100644 --- a/web/src/app/modules/admin/administration/api-keys/api-keys.data.service.ts +++ b/web/src/app/modules/admin/administration/api-keys/api-keys.data.service.ts @@ -91,14 +91,16 @@ export class ApiKeysDataService .query<{ apiKeys: QueryResult }>({ query: gql` query getApiKey($id: Int) { - apiKey(filter: { id: { equal: $id } }) { - id - identifier - permissions { - name - } + apiKeys(filter: { id: { equal: $id } }) { + nodes { + id + identifier + permissions { + name + } - ...DB_MODEL + ...DB_MODEL + } } } diff --git a/web/src/app/modules/admin/administration/api-keys/form-page/api-key-form-page.component.html b/web/src/app/modules/admin/administration/api-keys/form-page/api-key-form-page.component.html index a4f5628..8cdc353 100644 --- a/web/src/app/modules/admin/administration/api-keys/form-page/api-key-form-page.component.html +++ b/web/src/app/modules/admin/administration/api-keys/form-page/api-key-form-page.component.html @@ -1,63 +1,65 @@ - -

- {{ 'common.api_key' | translate }} - {{ - (isUpdate ? 'sidebar.header.update' : 'sidebar.header.create') - | translate - }} -

-
+ *ngIf="node" + [formGroup]="form" + [isUpdate]="isUpdate" + (onSave)="save()" + (onClose)="close()"> + +

+ {{ 'common.role' | translate }} + {{ + (isUpdate ? 'sidebar.header.update' : 'sidebar.header.create') + | translate + }} +

+
- -
-

{{ 'common.id' | translate }}

- -
-
-

{{ 'common.identifier' | translate }}

- -
-
- -
-
-
-
- -
- -
-
- -
- - - > - -
+ +
+

{{ 'common.id' | translate }}

+
-
-
- +
+

{{ 'common.identifier' | translate }}

+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+ + + +
+
+

+ {{ permission.description }} +

+
+
+
+
+
+ diff --git a/web/src/app/modules/admin/administration/api-keys/form-page/api-key-form-page.component.ts b/web/src/app/modules/admin/administration/api-keys/form-page/api-key-form-page.component.ts index 5b2d941..84e6ce1 100644 --- a/web/src/app/modules/admin/administration/api-keys/form-page/api-key-form-page.component.ts +++ b/web/src/app/modules/admin/administration/api-keys/form-page/api-key-form-page.component.ts @@ -11,6 +11,7 @@ import { ApiKeyUpdateInput, } from 'src/app/model/entities/api-key'; import { ApiKeysDataService } from 'src/app/modules/admin/administration/api-keys/api-keys.data.service'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-api-key-form-page', @@ -26,7 +27,10 @@ export class ApiKeyFormPageComponent extends FormPageBase< permissionGroups: { [key: string]: Permission[] } = {}; allPermissions: Permission[] = []; - constructor(private toast: ToastService) { + constructor( + private toast: ToastService, + private translate: TranslateService + ) { super(); this.initializePermissions().then(() => { if (!this.nodeId) { @@ -36,12 +40,10 @@ export class ApiKeyFormPageComponent extends FormPageBase< return; } - this.dataService - .load([{ id: { equal: this.nodeId } }]) - .subscribe(apiKey => { - this.node = apiKey.nodes[0]; - this.setForm(this.node); - }); + this.dataService.loadById(this.nodeId).subscribe(apiKey => { + this.node = apiKey; + this.setForm(this.node); + }); }); } @@ -49,7 +51,12 @@ export class ApiKeyFormPageComponent extends FormPageBase< const permissions = await firstValueFrom( this.dataService.getAllPermissions() ); - this.allPermissions = permissions; + this.allPermissions = permissions.map(x => { + const key = `permission_descriptions.${x.name}`; + const description = this.translate.instant(key); + x.description = description === key ? undefined : description; + return x; + }); this.permissionGroups = permissions.reduce( (acc, p) => { const group = p.name.includes('.') ? p.name.split('.')[0] : p.name;