ng-secure-access
Version:
Librairie Angular pour la gestion des permissions d'accès aux routes et l'affichage conditionnel basé sur les permissions utilisateur
44 lines • 5.18 kB
JavaScript
import { Directive, Input } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "./permission.service";
export class HasPermissionDirective {
templateRef;
viewContainer;
permissionService;
permissionsRequired = [];
constructor(templateRef, viewContainer, permissionService) {
this.templateRef = templateRef;
this.viewContainer = viewContainer;
this.permissionService = permissionService;
}
set hasPermission(permissions) {
this.permissionsRequired = permissions;
this.updateView();
}
updateView() {
if (this.checkPermissions()) {
// Affiche l'élément si au moins une permission est présente
this.viewContainer.createEmbeddedView(this.templateRef);
}
else {
// Masque l'élément
this.viewContainer.clear();
}
}
checkPermissions() {
// Vérifie si l'utilisateur a au moins une des permissions requises
return this.permissionService.hasPermission(this.permissionsRequired);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasPermissionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.PermissionService }], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: HasPermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission" }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasPermissionDirective, decorators: [{
type: Directive,
args: [{
selector: '[hasPermission]',
standalone: true
}]
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.PermissionService }], propDecorators: { hasPermission: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXBlcm1pc3Npb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctc2VjdXJlLWFjY2Vzcy9zcmMvbGliL2hhcy1wZXJtaXNzaW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7OztBQU85RSxNQUFNLE9BQU8sc0JBQXNCO0lBSW5CO0lBQ0E7SUFDQTtJQUxKLG1CQUFtQixHQUFhLEVBQUUsQ0FBQztJQUUzQyxZQUNZLFdBQTZCLEVBQzdCLGFBQStCLEVBQy9CLGlCQUFvQztRQUZwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFDN0MsQ0FBQztJQUVKLElBQWEsYUFBYSxDQUFDLFdBQXFCO1FBQzVDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1lBQzFCLDREQUE0RDtZQUM1RCxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxDQUFDO2FBQU0sQ0FBQztZQUNKLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLG1FQUFtRTtRQUNuRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUUsQ0FBQzt1R0EzQlEsc0JBQXNCOzJGQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7aUJBQ25COytJQVVnQixhQUFhO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UGVybWlzc2lvblNlcnZpY2V9IGZyb20gXCIuL3Blcm1pc3Npb24uc2VydmljZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1toYXNQZXJtaXNzaW9uXScsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIYXNQZXJtaXNzaW9uRGlyZWN0aXZlIHtcclxuICAgIHByaXZhdGUgcGVybWlzc2lvbnNSZXF1aXJlZDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxyXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBwcml2YXRlIHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIEBJbnB1dCgpIHNldCBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb25zOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNSZXF1aXJlZCA9IHBlcm1pc3Npb25zO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVmlldygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja1Blcm1pc3Npb25zKCkpIHtcclxuICAgICAgICAgICAgLy8gQWZmaWNoZSBsJ8OpbMOpbWVudCBzaSBhdSBtb2lucyB1bmUgcGVybWlzc2lvbiBlc3QgcHLDqXNlbnRlXHJcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTWFzcXVlIGwnw6lsw6ltZW50XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrUGVybWlzc2lvbnMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gVsOpcmlmaWUgc2kgbCd1dGlsaXNhdGV1ciBhIGF1IG1vaW5zIHVuZSBkZXMgcGVybWlzc2lvbnMgcmVxdWlzZXNcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMucGVybWlzc2lvbnNSZXF1aXJlZCk7XHJcbiAgICB9XHJcbn1cclxuIl19