diff --git a/apps/api/src/app/access/access.controller.ts b/apps/api/src/app/access/access.controller.ts index b673bb734..8ac276fb3 100644 --- a/apps/api/src/app/access/access.controller.ts +++ b/apps/api/src/app/access/access.controller.ts @@ -48,6 +48,7 @@ export class AccessController { alias: access.alias, grantee: access.GranteeUser?.id, id: access.id, + permissions: access.permissions, type: 'RESTRICTED_VIEW' }; } @@ -56,6 +57,7 @@ export class AccessController { alias: access.alias, grantee: 'Public', id: access.id, + permissions: access.permissions, type: 'PUBLIC' }; }); @@ -83,6 +85,7 @@ export class AccessController { GranteeUser: data.granteeUserId ? { connect: { id: data.granteeUserId } } : undefined, + permissions: data.permissions, User: { connect: { id: this.request.user.id } } }); } catch { diff --git a/apps/api/src/app/access/create-access.dto.ts b/apps/api/src/app/access/create-access.dto.ts index de9ea3b82..087df7183 100644 --- a/apps/api/src/app/access/create-access.dto.ts +++ b/apps/api/src/app/access/create-access.dto.ts @@ -1,4 +1,5 @@ -import { IsOptional, IsString, IsUUID } from 'class-validator'; +import { AccessPermission } from '@prisma/client'; +import { IsEnum, IsOptional, IsString, IsUUID } from 'class-validator'; export class CreateAccessDto { @IsOptional() @@ -9,11 +10,7 @@ export class CreateAccessDto { @IsUUID() granteeUserId?: string; + @IsEnum(AccessPermission, { each: true }) @IsOptional() - @IsString() - type?: 'PUBLIC'; - - @IsOptional() - @IsString() - permission?: string; + permissions?: AccessPermission[]; } diff --git a/apps/client/src/app/components/access-table/access-table.component.ts b/apps/client/src/app/components/access-table/access-table.component.ts index ee489253c..f14185fb4 100644 --- a/apps/client/src/app/components/access-table/access-table.component.ts +++ b/apps/client/src/app/components/access-table/access-table.component.ts @@ -49,15 +49,12 @@ export class AccessTableComponent implements OnChanges, OnInit { return $localize`Public`; } - if (access.type === 'PRIVATE') { - switch (access.permission) { - case 'READ': - return $localize`View`; - case 'READ_RESTRICTED': - return $localize`Restricted View`; - default: - return $localize`Unknown`; - } + if (access.permissions.includes('READ')) { + return $localize`View`; + } else if (access.permissions.includes('READ_RESTRICTED')) { + return $localize`Restricted View`; + } else { + return $localize`Unknown`; } } diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts index 9c88d06ab..4afde8031 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts @@ -37,24 +37,24 @@ export class CreateOrUpdateAccessDialog implements OnDestroy { ngOnInit() { this.accessForm = this.formBuilder.group({ alias: [this.data.access.alias], + permissions: [this.data.access.permissions[0], Validators.required], type: [this.data.access.type, Validators.required], - userId: [this.data.access.grantee, Validators.required], - permission: [this.data.access.permission, Validators.required] + userId: [this.data.access.grantee, Validators.required] }); this.accessForm.get('type').valueChanges.subscribe((value) => { + const permissionsControl = this.accessForm.get('permissions'); const userIdControl = this.accessForm.get('userId'); - const permissionControl = this.accessForm.get('permission'); if (value === 'PRIVATE') { + permissionsControl.setValidators(Validators.required); userIdControl.setValidators(Validators.required); - permissionControl.setValidators(Validators.required); } else { userIdControl.clearValidators(); } + permissionsControl.updateValueAndValidity(); userIdControl.updateValueAndValidity(); - permissionControl.updateValueAndValidity(); this.changeDetectorRef.markForCheck(); }); @@ -68,8 +68,7 @@ export class CreateOrUpdateAccessDialog implements OnDestroy { const access: CreateAccessDto = { alias: this.accessForm.controls['alias'].value, granteeUserId: this.accessForm.controls['userId'].value, - type: this.accessForm.controls['type'].value, - permission: this.accessForm.controls['permission'].value + permissions: [this.accessForm.controls['permissions'].value] }; this.dataService diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html index df740a654..480652fb5 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -28,6 +28,15 @@ @if (accessForm.controls['type'].value === 'PRIVATE') { +