disable document form components when no object permissions

This commit is contained in:
Michael Shamoon
2022-12-07 15:46:52 -08:00
parent 79cf1de615
commit 932051d80d
18 changed files with 116 additions and 21 deletions

View File

@@ -0,0 +1,54 @@
import {
Directive,
Input,
OnChanges,
OnInit,
TemplateRef,
ViewContainerRef,
} from '@angular/core'
import { ObjectWithPermissions } from '../data/object-with-permissions'
import {
PermissionAction,
PermissionsService,
} from '../services/permissions.service'
@Directive({
selector: '[ifObjectPermissions]',
})
export class IfObjectPermissionsDirective implements OnInit, OnChanges {
// The role the user must have
@Input()
ifObjectPermissions: ObjectWithPermissions
@Input()
action: PermissionAction
/**
* @param {ViewContainerRef} viewContainerRef -- The location where we need to render the templateRef
* @param {TemplateRef<any>} templateRef -- The templateRef to be potentially rendered
* @param {PermissionsService} permissionsService -- Will give us access to the permissions a user has
*/
constructor(
private viewContainerRef: ViewContainerRef,
private templateRef: TemplateRef<any>,
private permissionsService: PermissionsService
) {}
public ngOnInit(): void {
if (
!this.ifObjectPermissions ||
this.permissionsService.currentUserHasObjectPermissions(
this.action,
this.ifObjectPermissions
)
) {
this.viewContainerRef.createEmbeddedView(this.templateRef)
} else {
this.viewContainerRef.clear()
}
}
public ngOnChanges(): void {
this.ngOnInit()
}
}

View File

@@ -7,7 +7,7 @@ import {
ViewContainerRef,
} from '@angular/core'
import { PaperlessUser } from '../data/paperless-user'
import { SettingsService } from '../services/settings.service'
import { PermissionsService } from '../services/permissions.service'
@Directive({
selector: '[ifOwner]',
@@ -25,11 +25,14 @@ export class IfOwnerDirective implements OnInit, OnChanges {
constructor(
private viewContainerRef: ViewContainerRef,
private templateRef: TemplateRef<any>,
private settings: SettingsService
private permissionsService: PermissionsService
) {}
public ngOnInit(): void {
if (!this.ifOwner || this.ifOwner?.id === this.settings.currentUser.id) {
if (
!this.ifOwner ||
this.permissionsService.currentUserIsOwner(this.ifOwner)
) {
this.viewContainerRef.createEmbeddedView(this.templateRef)
} else {
this.viewContainerRef.clear()