Fixed api key edit
This commit is contained in:
parent
9fb7bfc2d8
commit
60d2faf2f6
@ -63,7 +63,7 @@ class APIKeyMutation(MutationABC):
|
|||||||
|
|
||||||
if obj.permissions is not None:
|
if obj.permissions is not None:
|
||||||
permissions = [
|
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 = (
|
to_delete = (
|
||||||
|
@ -40,7 +40,7 @@ class ApiKey(DbModelABC):
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
await x.permission
|
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:
|
async def has_permission(self, permission: Permissions) -> bool:
|
||||||
|
@ -15,23 +15,23 @@ class ApiKeyPermissionDao(DbModelDaoABC[ApiKeyPermission]):
|
|||||||
self.attribute(ApiKeyPermission.api_key_id, int)
|
self.attribute(ApiKeyPermission.api_key_id, int)
|
||||||
self.attribute(ApiKeyPermission.permission_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
|
self, api_key_id: int, with_deleted=False
|
||||||
) -> list[ApiKeyPermission]:
|
) -> list[ApiKeyPermission]:
|
||||||
f = [{ApiKeyPermission.api_key_id: api_key_id}]
|
f = [{ApiKeyPermission.api_key_id: api_key_id}]
|
||||||
if not with_deleted:
|
if not with_deleted:
|
||||||
f.append({ApiKeyPermission.deleted: False})
|
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
|
self, permission_id: int, with_deleted=False
|
||||||
) -> list[ApiKeyPermission]:
|
) -> list[ApiKeyPermission]:
|
||||||
f = [{ApiKeyPermission.permission_id: permission_id}]
|
f = [{ApiKeyPermission.permission_id: permission_id}]
|
||||||
if not with_deleted:
|
if not with_deleted:
|
||||||
f.append({ApiKeyPermission.deleted: False})
|
f.append({ApiKeyPermission.deleted: False})
|
||||||
|
|
||||||
return await self.get_by(f)
|
return await self.find_by(f)
|
||||||
|
|
||||||
|
|
||||||
apiKeyPermissionDao = ApiKeyPermissionDao()
|
apiKeyPermissionDao = ApiKeyPermissionDao()
|
||||||
|
@ -71,7 +71,7 @@ class PermissionSeeder(DataSeederABC):
|
|||||||
if admin_api_key is None:
|
if admin_api_key is None:
|
||||||
return
|
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
|
admin_api_key.id, with_deleted=True
|
||||||
)
|
)
|
||||||
to_assign = [
|
to_assign = [
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DbModel } from "src/app/model/entities/db-model";
|
import { DbModel } from 'src/app/model/entities/db-model';
|
||||||
import { Permission } from "src/app/model/entities/role";
|
import { Permission } from 'src/app/model/entities/role';
|
||||||
|
|
||||||
export interface ApiKey extends DbModel {
|
export interface ApiKey extends DbModel {
|
||||||
identifier?: string;
|
identifier?: string;
|
||||||
|
@ -91,14 +91,16 @@ export class ApiKeysDataService
|
|||||||
.query<{ apiKeys: QueryResult<ApiKey> }>({
|
.query<{ apiKeys: QueryResult<ApiKey> }>({
|
||||||
query: gql`
|
query: gql`
|
||||||
query getApiKey($id: Int) {
|
query getApiKey($id: Int) {
|
||||||
apiKey(filter: { id: { equal: $id } }) {
|
apiKeys(filter: { id: { equal: $id } }) {
|
||||||
id
|
nodes {
|
||||||
identifier
|
id
|
||||||
permissions {
|
identifier
|
||||||
name
|
permissions {
|
||||||
}
|
name
|
||||||
|
}
|
||||||
|
|
||||||
...DB_MODEL
|
...DB_MODEL
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,63 +1,65 @@
|
|||||||
<app-form-page
|
<app-form-page
|
||||||
*ngIf="node"
|
*ngIf="node"
|
||||||
[formGroup]="form"
|
[formGroup]="form"
|
||||||
[isUpdate]="isUpdate"
|
[isUpdate]="isUpdate"
|
||||||
(onSave)="save()"
|
(onSave)="save()"
|
||||||
(onClose)="close()">
|
(onClose)="close()">
|
||||||
<ng-template formPageHeader let-isUpdate>
|
<ng-template formPageHeader let-isUpdate>
|
||||||
<h2>
|
<h2>
|
||||||
{{ 'common.api_key' | translate }}
|
{{ 'common.role' | translate }}
|
||||||
{{
|
{{
|
||||||
(isUpdate ? 'sidebar.header.update' : 'sidebar.header.create')
|
(isUpdate ? 'sidebar.header.update' : 'sidebar.header.create')
|
||||||
| translate
|
| translate
|
||||||
}}
|
}}
|
||||||
</h2>
|
</h2>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template formPageContent>
|
<ng-template formPageContent>
|
||||||
<div class="form-page-input">
|
<div class="form-page-input">
|
||||||
<p class="label">{{ 'common.id' | translate }}</p>
|
<p class="label">{{ 'common.id' | translate }}</p>
|
||||||
<input pInputText class="value" type="number" formControlName="id" />
|
<input pInputText class="value" type="number" formControlName="id"/>
|
||||||
</div>
|
|
||||||
<div class="form-page-input">
|
|
||||||
<p class="label">{{ 'common.identifier' | translate }}</p>
|
|
||||||
<input
|
|
||||||
pInputText
|
|
||||||
class="value"
|
|
||||||
type="text"
|
|
||||||
formControlName="identifier" />
|
|
||||||
</div>
|
|
||||||
<div class="divider"></div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-5">
|
|
||||||
<div *ngFor="let group of Object.keys(permissionGroups)">
|
|
||||||
<div class="flex flex-col">
|
|
||||||
<div class="flex justify-between">
|
|
||||||
<label class="flex-1" for="apiKeys.permission_groups.{{ group }}">
|
|
||||||
<h3>
|
|
||||||
{{ 'permissions.' + group | translate }}
|
|
||||||
</h3>
|
|
||||||
</label>
|
|
||||||
<form #form="ngForm">
|
|
||||||
<p-inputSwitch
|
|
||||||
name="apiKeys.permission_groups.{{ group }}"
|
|
||||||
(onChange)="toggleGroup($event, group)"
|
|
||||||
[ngModel]="isGroupChecked(group)"></p-inputSwitch>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
*ngFor="let permission of permissionGroups[group]"
|
|
||||||
class="flex items-center justify-between w-full">
|
|
||||||
<label class="flex-1" for="{{ permission.name }}">
|
|
||||||
{{ 'permissions.' + permission.name | translate }}
|
|
||||||
</label>
|
|
||||||
<p-inputSwitch [formControlName]="permission.name">
|
|
||||||
>
|
|
||||||
</p-inputSwitch>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="form-page-input">
|
||||||
</div>
|
<p class="label">{{ 'common.identifier' | translate }}</p>
|
||||||
</ng-template>
|
<input pInputText class="value" type="text" formControlName="identifier"/>
|
||||||
|
</div>
|
||||||
|
<div class="divider"></div>
|
||||||
|
|
||||||
|
<div class="flex flex-col gap-5">
|
||||||
|
<div *ngFor="let group of Object.keys(permissionGroups)">
|
||||||
|
<div class="flex flex-col gap-2">
|
||||||
|
<div class="flex justify-between">
|
||||||
|
<label class="flex-1" for="roles.permission_groups.{{ group }}">
|
||||||
|
<h3>
|
||||||
|
{{ 'permissions.' + group | translate }}
|
||||||
|
</h3>
|
||||||
|
</label>
|
||||||
|
<form #form="ngForm">
|
||||||
|
<p-inputSwitch
|
||||||
|
name="roles.permission_groups.{{ group }}"
|
||||||
|
(onChange)="toggleGroup($event, group)"
|
||||||
|
[ngModel]="isGroupChecked(group)"></p-inputSwitch>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
*ngFor="let permission of permissionGroups[group]"
|
||||||
|
class="flex flex-col">
|
||||||
|
<div class="flex items-center justify-between w-full">
|
||||||
|
<label class="flex-1" for="{{ permission.name }}">
|
||||||
|
{{ 'permissions.' + permission.name | translate }}
|
||||||
|
</label>
|
||||||
|
<p-inputSwitch class="flex items-center justify-center" [formControlName]="permission.name">
|
||||||
|
</p-inputSwitch>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="permission.description">
|
||||||
|
<p class="text-sm text-gray-500">
|
||||||
|
{{ permission.description }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ng-template>
|
||||||
</app-form-page>
|
</app-form-page>
|
||||||
|
@ -11,6 +11,7 @@ import {
|
|||||||
ApiKeyUpdateInput,
|
ApiKeyUpdateInput,
|
||||||
} from 'src/app/model/entities/api-key';
|
} from 'src/app/model/entities/api-key';
|
||||||
import { ApiKeysDataService } from 'src/app/modules/admin/administration/api-keys/api-keys.data.service';
|
import { ApiKeysDataService } from 'src/app/modules/admin/administration/api-keys/api-keys.data.service';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-api-key-form-page',
|
selector: 'app-api-key-form-page',
|
||||||
@ -26,7 +27,10 @@ export class ApiKeyFormPageComponent extends FormPageBase<
|
|||||||
permissionGroups: { [key: string]: Permission[] } = {};
|
permissionGroups: { [key: string]: Permission[] } = {};
|
||||||
allPermissions: Permission[] = [];
|
allPermissions: Permission[] = [];
|
||||||
|
|
||||||
constructor(private toast: ToastService) {
|
constructor(
|
||||||
|
private toast: ToastService,
|
||||||
|
private translate: TranslateService
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
this.initializePermissions().then(() => {
|
this.initializePermissions().then(() => {
|
||||||
if (!this.nodeId) {
|
if (!this.nodeId) {
|
||||||
@ -36,12 +40,10 @@ export class ApiKeyFormPageComponent extends FormPageBase<
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.dataService
|
this.dataService.loadById(this.nodeId).subscribe(apiKey => {
|
||||||
.load([{ id: { equal: this.nodeId } }])
|
this.node = apiKey;
|
||||||
.subscribe(apiKey => {
|
this.setForm(this.node);
|
||||||
this.node = apiKey.nodes[0];
|
});
|
||||||
this.setForm(this.node);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,7 +51,12 @@ export class ApiKeyFormPageComponent extends FormPageBase<
|
|||||||
const permissions = await firstValueFrom(
|
const permissions = await firstValueFrom(
|
||||||
this.dataService.getAllPermissions()
|
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(
|
this.permissionGroups = permissions.reduce(
|
||||||
(acc, p) => {
|
(acc, p) => {
|
||||||
const group = p.name.includes('.') ? p.name.split('.')[0] : p.name;
|
const group = p.name.includes('.') ? p.name.split('.')[0] : p.name;
|
||||||
|
Loading…
Reference in New Issue
Block a user