Browse Source

Refactoring

pull/2870/head
Thomas Kaul 2 years ago
parent
commit
25d54ef682
  1. 3
      apps/api/src/app/access/access.controller.ts
  2. 11
      apps/api/src/app/access/create-access.dto.ts
  3. 15
      apps/client/src/app/components/access-table/access-table.component.ts
  4. 13
      apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
  5. 18
      apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html
  6. 1
      apps/client/src/app/components/user-account-access/user-account-access.component.ts
  7. 4
      libs/common/src/lib/interfaces/access.interface.ts

3
apps/api/src/app/access/access.controller.ts

@ -48,6 +48,7 @@ export class AccessController {
alias: access.alias, alias: access.alias,
grantee: access.GranteeUser?.id, grantee: access.GranteeUser?.id,
id: access.id, id: access.id,
permissions: access.permissions,
type: 'RESTRICTED_VIEW' type: 'RESTRICTED_VIEW'
}; };
} }
@ -56,6 +57,7 @@ export class AccessController {
alias: access.alias, alias: access.alias,
grantee: 'Public', grantee: 'Public',
id: access.id, id: access.id,
permissions: access.permissions,
type: 'PUBLIC' type: 'PUBLIC'
}; };
}); });
@ -83,6 +85,7 @@ export class AccessController {
GranteeUser: data.granteeUserId GranteeUser: data.granteeUserId
? { connect: { id: data.granteeUserId } } ? { connect: { id: data.granteeUserId } }
: undefined, : undefined,
permissions: data.permissions,
User: { connect: { id: this.request.user.id } } User: { connect: { id: this.request.user.id } }
}); });
} catch { } catch {

11
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 { export class CreateAccessDto {
@IsOptional() @IsOptional()
@ -9,11 +10,7 @@ export class CreateAccessDto {
@IsUUID() @IsUUID()
granteeUserId?: string; granteeUserId?: string;
@IsEnum(AccessPermission, { each: true })
@IsOptional() @IsOptional()
@IsString() permissions?: AccessPermission[];
type?: 'PUBLIC';
@IsOptional()
@IsString()
permission?: string;
} }

15
apps/client/src/app/components/access-table/access-table.component.ts

@ -49,15 +49,12 @@ export class AccessTableComponent implements OnChanges, OnInit {
return $localize`Public`; return $localize`Public`;
} }
if (access.type === 'PRIVATE') { if (access.permissions.includes('READ')) {
switch (access.permission) { return $localize`View`;
case 'READ': } else if (access.permissions.includes('READ_RESTRICTED')) {
return $localize`View`; return $localize`Restricted View`;
case 'READ_RESTRICTED': } else {
return $localize`Restricted View`; return $localize`Unknown`;
default:
return $localize`Unknown`;
}
} }
} }

13
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() { ngOnInit() {
this.accessForm = this.formBuilder.group({ this.accessForm = this.formBuilder.group({
alias: [this.data.access.alias], alias: [this.data.access.alias],
permissions: [this.data.access.permissions[0], Validators.required],
type: [this.data.access.type, Validators.required], type: [this.data.access.type, Validators.required],
userId: [this.data.access.grantee, Validators.required], userId: [this.data.access.grantee, Validators.required]
permission: [this.data.access.permission, Validators.required]
}); });
this.accessForm.get('type').valueChanges.subscribe((value) => { this.accessForm.get('type').valueChanges.subscribe((value) => {
const permissionsControl = this.accessForm.get('permissions');
const userIdControl = this.accessForm.get('userId'); const userIdControl = this.accessForm.get('userId');
const permissionControl = this.accessForm.get('permission');
if (value === 'PRIVATE') { if (value === 'PRIVATE') {
permissionsControl.setValidators(Validators.required);
userIdControl.setValidators(Validators.required); userIdControl.setValidators(Validators.required);
permissionControl.setValidators(Validators.required);
} else { } else {
userIdControl.clearValidators(); userIdControl.clearValidators();
} }
permissionsControl.updateValueAndValidity();
userIdControl.updateValueAndValidity(); userIdControl.updateValueAndValidity();
permissionControl.updateValueAndValidity();
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();
}); });
@ -68,8 +68,7 @@ export class CreateOrUpdateAccessDialog implements OnDestroy {
const access: CreateAccessDto = { const access: CreateAccessDto = {
alias: this.accessForm.controls['alias'].value, alias: this.accessForm.controls['alias'].value,
granteeUserId: this.accessForm.controls['userId'].value, granteeUserId: this.accessForm.controls['userId'].value,
type: this.accessForm.controls['type'].value, permissions: [this.accessForm.controls['permissions'].value]
permission: this.accessForm.controls['permission'].value
}; };
this.dataService this.dataService

18
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html

@ -28,6 +28,15 @@
</div> </div>
@if (accessForm.controls['type'].value === 'PRIVATE') { @if (accessForm.controls['type'].value === 'PRIVATE') {
<div>
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Permission</mat-label>
<mat-select formControlName="permissions">
<mat-option i18n value="READ_RESTRICTED">Restricted view</mat-option>
<mat-option i18n value="READ">View</mat-option>
</mat-select>
</mat-form-field>
</div>
<div> <div>
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label> <mat-label>
@ -41,15 +50,6 @@
/> />
</mat-form-field> </mat-form-field>
</div> </div>
<div>
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Permission</mat-label>
<mat-select formControlName="permission">
<mat-option i18n value="READ_RESTRICTED">Restricted view</mat-option>
<mat-option i18n value="READ">View</mat-option>
</mat-select>
</mat-form-field>
</div>
} }
</div> </div>
<div class="justify-content-end" mat-dialog-actions> <div class="justify-content-end" mat-dialog-actions>

1
apps/client/src/app/components/user-account-access/user-account-access.component.ts

@ -105,6 +105,7 @@ export class UserAccountAccessComponent implements OnDestroy, OnInit {
data: { data: {
access: { access: {
alias: '', alias: '',
permissions: ['READ_RESTRICTED'],
type: 'PRIVATE' type: 'PRIVATE'
} }
}, },

4
libs/common/src/lib/interfaces/access.interface.ts

@ -1,7 +1,9 @@
import { AccessPermission } from '@prisma/client';
export interface Access { export interface Access {
alias?: string; alias?: string;
grantee?: string; grantee?: string;
id: string; id: string;
type: 'PRIVATE' | 'PUBLIC' | 'RESTRICTED_VIEW'; type: 'PRIVATE' | 'PUBLIC' | 'RESTRICTED_VIEW';
permission: 'READ' | 'READ_RESTRICTED'; permissions: AccessPermission[];
} }

Loading…
Cancel
Save