diff --git a/src/directives/has-role.directive.ts b/src/directives/has-role.directive.ts new file mode 100644 index 0000000..ad98942 --- /dev/null +++ b/src/directives/has-role.directive.ts @@ -0,0 +1,34 @@ +import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core'; +import AuthApiService from "@api/v1/authApiService"; +import {AuthRoles} from "@model/AuthRoles"; +import {catchError, of} from "rxjs"; + +@Directive({ + selector: '[appHasRole]', + standalone: true, + providers: [AuthApiService] +}) +export class HasRoleDirective { + constructor( + private templateRef: TemplateRef, + private viewContainer: ViewContainerRef, + private authService: AuthApiService + ) {} + + @Input() set appHasRole(role: AuthRoles) { + this.viewContainer.clear(); + + this.authService + .getRole() + .pipe(catchError(error => { + this.viewContainer.clear(); + return of(null); + })) + .subscribe(data => { + if (data === role) + this.viewContainer.createEmbeddedView(this.templateRef); + else + this.viewContainer.clear(); + }) + } +}