@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
73 lines • 7.7 kB
JavaScript
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
import { Permissions } from './permissions.service';
import * as i0 from "@angular/core";
import * as i1 from "./permissions.service";
/**
* A structural directive that conditionally includes a template only if the user has
* all or any of the roles passed as an input. By default the directive checks all roles:
*
* ```html
* <button *c8yIfAllowed="['ROLE_RECORD_DELETE', 'ROLE_ENTRY_DELETE']" (click)="delete()" title="Delete">
* Delete
* </button>
* ```
*
* To check if the user has any of the required roles to view the element you need to use the `allowAny` input:
*
* ```html
* <button *c8yIfAllowed="['ROLE_RECORD_DELETE', 'ROLE_ENTRY_DELETE']; allowAny: true" (click)="delete()" title="Delete">
* Delete
* </button>
* ```
*
* or use the shorter version
*
* ```html
* <button *c8yIfAllowed="['ROLE_RECORD_DELETE', 'ROLE_ENTRY_DELETE']; allowAny" (click)="delete()" title="Delete">
* Delete
* </button>
* ```
*/
export class IfAllowedDirective {
/**
* One or many roles required for the element to be rendered
*/
set c8yIfAllowed(roleIds) {
this.rolesIds = Array.isArray(roleIds) ? roleIds : !!roleIds ? [roleIds] : [];
}
/**
* Switches to the mode where at least one of the provided roles is sufficient for the element to be rendered
*/
set c8yIfAllowedAllowAny(allowAny) {
this.allowAny = allowAny === null || allowAny;
}
constructor(template, container, permissions) {
this.template = template;
this.container = container;
this.permissions = permissions;
this.allowAny = false;
}
ngOnInit() {
if (!this.rolesIds ||
!this.rolesIds.length ||
(this.allowAny
? this.permissions.hasAnyRole(this.rolesIds)
: this.permissions.hasAllRoles(this.rolesIds))) {
this.container.createEmbeddedView(this.template);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IfAllowedDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.Permissions }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: IfAllowedDirective, isStandalone: true, selector: "[c8yIfAllowed]", inputs: { c8yIfAllowed: "c8yIfAllowed", c8yIfAllowedAllowAny: "c8yIfAllowedAllowAny" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IfAllowedDirective, decorators: [{
type: Directive,
args: [{
selector: '[c8yIfAllowed]',
standalone: true
}]
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.Permissions }], propDecorators: { c8yIfAllowed: [{
type: Input
}], c8yIfAllowedAllowAny: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWYtYWxsb3dlZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9pZi1hbGxvd2VkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFLSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCOztPQUVHO0lBQ0gsSUFDSSxZQUFZLENBQUMsT0FBMEI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNoRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNJLG9CQUFvQixDQUFDLFFBQWlCO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUtELFlBQ1UsUUFBMEIsRUFDMUIsU0FBMkIsRUFDM0IsV0FBd0I7UUFGeEIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFMMUIsYUFBUSxHQUFHLEtBQUssQ0FBQztJQU10QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQ0UsQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNkLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQ3JCLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDaEQsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDOytHQXBDVSxrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7eUlBTUssWUFBWTtzQkFEZixLQUFLO2dCQVNGLG9CQUFvQjtzQkFEdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9ucyB9IGZyb20gJy4vcGVybWlzc2lvbnMuc2VydmljZSc7XG5cbi8qKlxuICogQSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSB0aGF0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZXMgYSB0ZW1wbGF0ZSBvbmx5IGlmIHRoZSB1c2VyIGhhc1xuICogYWxsIG9yIGFueSBvZiB0aGUgcm9sZXMgcGFzc2VkIGFzIGFuIGlucHV0LiBCeSBkZWZhdWx0IHRoZSBkaXJlY3RpdmUgY2hlY2tzIGFsbCByb2xlczpcbiAqXG4gKiBgYGBodG1sXG4gKiA8YnV0dG9uICpjOHlJZkFsbG93ZWQ9XCJbJ1JPTEVfUkVDT1JEX0RFTEVURScsICdST0xFX0VOVFJZX0RFTEVURSddXCIgKGNsaWNrKT1cImRlbGV0ZSgpXCIgdGl0bGU9XCJEZWxldGVcIj5cbiAqICAgRGVsZXRlXG4gKiA8L2J1dHRvbj5cbiAqIGBgYFxuICpcbiAqIFRvIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBhbnkgb2YgdGhlIHJlcXVpcmVkIHJvbGVzIHRvIHZpZXcgdGhlIGVsZW1lbnQgeW91IG5lZWQgdG8gdXNlIHRoZSBgYWxsb3dBbnlgIGlucHV0OlxuICpcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gKmM4eUlmQWxsb3dlZD1cIlsnUk9MRV9SRUNPUkRfREVMRVRFJywgJ1JPTEVfRU5UUllfREVMRVRFJ107IGFsbG93QW55OiB0cnVlXCIgKGNsaWNrKT1cImRlbGV0ZSgpXCIgdGl0bGU9XCJEZWxldGVcIj5cbiAqICAgRGVsZXRlXG4gKiA8L2J1dHRvbj5cbiAqIGBgYFxuICpcbiAqIG9yIHVzZSB0aGUgc2hvcnRlciB2ZXJzaW9uXG4gKlxuICogYGBgaHRtbFxuICogPGJ1dHRvbiAqYzh5SWZBbGxvd2VkPVwiWydST0xFX1JFQ09SRF9ERUxFVEUnLCAnUk9MRV9FTlRSWV9ERUxFVEUnXTsgYWxsb3dBbnlcIiAoY2xpY2spPVwiZGVsZXRlKClcIiB0aXRsZT1cIkRlbGV0ZVwiPlxuICogICBEZWxldGVcbiAqIDwvYnV0dG9uPlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjOHlJZkFsbG93ZWRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZkFsbG93ZWREaXJlY3RpdmUge1xuICAvKipcbiAgICogT25lIG9yIG1hbnkgcm9sZXMgcmVxdWlyZWQgZm9yIHRoZSBlbGVtZW50IHRvIGJlIHJlbmRlcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5SWZBbGxvd2VkKHJvbGVJZHM6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5yb2xlc0lkcyA9IEFycmF5LmlzQXJyYXkocm9sZUlkcykgPyByb2xlSWRzIDogISFyb2xlSWRzID8gW3JvbGVJZHNdIDogW107XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoZXMgdG8gdGhlIG1vZGUgd2hlcmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBwcm92aWRlZCByb2xlcyBpcyBzdWZmaWNpZW50IGZvciB0aGUgZWxlbWVudCB0byBiZSByZW5kZXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUlmQWxsb3dlZEFsbG93QW55KGFsbG93QW55OiBib29sZWFuKSB7XG4gICAgdGhpcy5hbGxvd0FueSA9IGFsbG93QW55ID09PSBudWxsIHx8IGFsbG93QW55O1xuICB9XG5cbiAgcHJpdmF0ZSByb2xlc0lkczogc3RyaW5nW107XG4gIHByaXZhdGUgYWxsb3dBbnkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIHByaXZhdGUgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5yb2xlc0lkcyB8fFxuICAgICAgIXRoaXMucm9sZXNJZHMubGVuZ3RoIHx8XG4gICAgICAodGhpcy5hbGxvd0FueVxuICAgICAgICA/IHRoaXMucGVybWlzc2lvbnMuaGFzQW55Um9sZSh0aGlzLnJvbGVzSWRzKVxuICAgICAgICA6IHRoaXMucGVybWlzc2lvbnMuaGFzQWxsUm9sZXModGhpcy5yb2xlc0lkcykpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=