@esfaenza/access-control 14.2.0 → 14.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -109,9 +109,9 @@ export class AccessControlRouteGuard {
109
109
  onRedirectInProgress() {
110
110
  }
111
111
  }
112
- AccessControlRouteGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard, deps: [{ token: i1.MessageService }, { token: i2.AccessControlService }, { token: i3.Router }, { token: ACC_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
113
- AccessControlRouteGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard });
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard, decorators: [{
112
+ AccessControlRouteGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard, deps: [{ token: i1.MessageService }, { token: i2.AccessControlService }, { token: i3.Router }, { token: ACC_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
113
+ AccessControlRouteGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard });
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard, decorators: [{
115
115
  type: Injectable
116
116
  }], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.AccessControlService }, { type: i3.Router }, { type: undefined, decorators: [{
117
117
  type: Optional
@@ -119,4 +119,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
119
119
  type: Inject,
120
120
  args: [ACC_LOCALE]
121
121
  }] }]; } });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzQ29udHJvbFJvdXRlR3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvbGliL0FjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxNQUFNO0FBQ04sT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHOUQsUUFBUTtBQUNSLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7O0FBR3RDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQXdCaEM7O09BRUc7SUFDSCxZQUFvQixVQUEyQixFQUFVLEVBQXdCLEVBQVUsTUFBYyxFQUFrQyxNQUFjO1FBQXJJLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBckJ6Rzs7OztXQUlHO1FBQ08sZUFBVSxHQUFZLE9BQU8sQ0FBQztRQUV4Qzs7O1dBR0c7UUFDTyx1QkFBa0IsR0FBYSxFQUFFLENBQUM7UUFFNUM7O1dBRUc7UUFDTyxXQUFNLEdBQTBDLEVBQUUsQ0FBQztRQU16RCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksbUJBQW1CLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLEtBQTZCLEVBQUUsQ0FBc0I7UUFDbEUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxD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QkE0QnFHLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vQW5ndWxhclxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUNoaWxkLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLy9MaWJzXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vTW9kZWxzXHJcbmltcG9ydCB7IEFDQ19MT0NBTEUgfSBmcm9tIFwiLi90b2tlbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL2FjY2Vzcy1jb250cm9sLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFJvdXRlciBHdWFyZCBiYXNlIHBlciBwcm90ZWdnZXJlIGwnYWNjZXNzbyBhbGxlIHJvdXRlIGRlbGwnYXBwbGljYXppb25lLiBQZXIgdXRpbGl6emFybGEgw6ggc3VmZmljaWVudGUgZXJlZGl0YXJsYSBlLCBuZWwgY29zdHJ1dHRvcmUgZGVsbGEgY2xhc3NlXHJcbiAqIGNoZSBsYSBlcmVkaXRhdmFsb3JpenphcmUgbGEgdmFyaWFiaWxlIFJvdXRlcyBjb24gbGUgcm91dGUgcGVybWVzc2UgZGFsIG1vZHVsbyBlIGlsIHBlcm1lc3NvIHBlciBjdWkgc2kgdnVvbGUgcmlzZXJ2YXJlIGwnYWNjZXNzby4gQWQgZXNlbXBpbzpcclxuICogXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogQEluamVjdGFibGUoKVxyXG4gKiBleHBvcnQgY2xhc3MgSGFzQXV0aEd1YXJkQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJvdXRlckd1YXJkIHtcclxuICogICAgICBjb25zdHJ1Y3RvcihhY2M6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCByb3V0ZXI6IFJvdXRlciwgbXM6IE1lc3NhZ2VTZXJ2aWNlLCB0czogQmFzZVRva2VuU2VydmljZSkge1xyXG4gKiAgICAgICAgICBzdXBlcihtcywgYWNjLCByb3V0ZXIsIHRzKTtcclxuICogICAgICAgICAgdGhpcy5Sb3V0ZXMgPSBbXHJcbiAqICAgICAgICAgICAgICB7IHJvdXRlOiBcInBhZ2Vfcm91dGVcIiwgcGVybWlzc2lvbjogXCJQOnBlcm1fb25lXCIgfSxcclxuICogICAgICAgICAgICAgIHsgcm91dGU6IFwiKlwiLCBwZXJtaXNzaW9uOiBcIlI6cm9sZV9vbmVcIiB9XHJcbiAqICAgICAgICAgIF1cclxuICogICAgICB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sUm91dGVHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlQ2hpbGQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbGM6IExvY2FsaXphdGlvblNlcnZpY2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3V0ZSBkaSBsb2dpbiBjaGUgc2VydmUgcGVyIHJlaW5kaXJpenphcmUgYWxsYSBwYWdpbmEgZGkgbG9naW4gaW4gY2FzbyBkaSBmYWxsaW1lbnRvIGRlbCBjb250cm9sbG8gc3VpIFBlcm1lc3NpXHJcbiAgICAgKiBcclxuICAgICAqIEBkZWZhdWx0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBMb2dpblJvdXRlIDogc3RyaW5nID0gXCJsb2dpblwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVybWV0dGUgZGkgc3BlY2lmaWNhcmUgZGVsbGUgUm91dGUgc2VtcHJlIGNvbnNlbnRpdGUsIGFuY2hlIGEgbGl2ZWxsbyBkaSBcIlJhZGljZVwiLiBBZCBlc2VtcGlvIGxhIFJvb3QgXCJ0ZXN0XCIgcGVybWV0dGVyw6BcclxuICAgICAqIGwnYWNjZXNzbyBhIHR1dHRlIGxlIHJvdXRlIGNoZSBhbmNoZSBzb2xvIGluaXppYW5vIHBlciBcInRlc3RcIlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgQWx3YXlzQWxsb3dlZFJvb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRpIFJvdXRlIGNvbiBsYSBsb3JvIGVzcHJlc3Npb25lIGRpIGNvbnRyb2xsbyBwZXIgdmFsdXRhcmUgaSBwZXJtZXNzaVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgUm91dGVzOiB7IHJvdXRlOiBhbnk7IHBlcm1pc3Npb246IHN0cmluZzsgfVtdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbXNnU2VydmljZSA6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgQE9wdGlvbmFsKCkgQEluamVjdChBQ0NfTE9DQUxFKSBMT0NBTEU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubGMgPSBuZXcgTG9jYWxpemF0aW9uU2VydmljZShMT0NBTEUgPz8gJ2l0LUlUJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNhbkFjdGl2YXRlQ2hpbGQocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIF86IFJvdXRlclN0YXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB2YXIgdXJsID0gcm91dGUudXJsLmpvaW4oJy8nKTtcclxuICAgICAgICAvL1NlIGwnYXBwbGljYXppb25lIG5vbiDDqCBwcm9udGEgZSBub24gc3RvIG5hdmlnYW5kbyBuZWxsZSBwYWdpbmUgY29uc2VudGl0ZVxyXG4gICAgICAgIGlmICghdGhpcy5hYy5Jbml0aWFsaXplZCAmJiAhdGhpcy5BbHdheXNBbGxvd2VkUm9vdHMuZmluZChyID0+IHVybC5pbmRleE9mKHIpICE9IC0xKSlcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHZhciByb3V0ZU1hdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuUm91dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCByID0gdGhpcy5Sb3V0ZXNbaV07XHJcbiAgICAgICAgICAgIC8vU2UgZmFjY2lvIG1hdGNoIGNvbiBsYSByb3V0ZSBzaWduaWZpY2EgY2hlIGhvIG5hdmlnYXRvIGluIHVuYSBkZWxsZSByb3V0ZSBjb25vc2NpdXRlLCBhbHRyaW1lbnRpIGF2dmVydG8gbWEgbGFzY2lvIGFuZGFyZVxyXG4gICAgICAgICAgICBpZiAodXJsLmluZGV4T2Yoci5yb3V0ZSkgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJvdXRlTWF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVNYXRjaCh1cmwsIHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vU2Ugbm9uIGZhY2NpbyBuZXNzdW4gbWF0Y2ggbWEgaG8gdW5hIHJvdXRlIHdpbGRjYXJkICgqKSBwcmVuZG8gcXVlbGxhIGUgY29udHJvbGxvIHN1IHF1ZWxsYVxyXG4gICAgICAgIGlmICghcm91dGVNYXRjaGVkKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWxkY2FyZFJvdXRlID0gdGhpcy5Sb3V0ZXMuZmluZChyID0+IHIucm91dGUgPT0gXCIqXCIpO1xyXG4gICAgICAgICAgICBpZiAod2lsZGNhcmRSb3V0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZU1hdGNoKHVybCwgd2lsZGNhcmRSb3V0ZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTmF2aWdhaXpvbmUgYXZ2ZW51dGEgc3Ugcm91dGUgc2Nvbm9zY2l1dGE6IFwiICsgdXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVNYXRjaChmcm9tdXJsOiBzdHJpbmcsIHI6IGFueSkge1xyXG4gICAgICAgIGxldCBpZGVudGl0eSA9IHRoaXMuYWMuSWRlbnRpdHk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjLmhhcyhyLnBlcm1pc3Npb24pIHx8XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgIC8vIENvbnNpZGVybyBhbmNoZSBsYSBwb3NzaWJpbGl0w6AgZGkgYXZlcmUgbCdhY2Nlc3MgY29udHJvbCBpbml6aWFsaXp6YXRvIG1hIGNoZSBsJ2FjY291bnQgc2NvcGUgbm9uIHNpYSBhbmNvcmEgcHJlc2VudGVcclxuICAgICAgICAgICAgICAgIC8vIGluIHF1ZXN0byBjYXNvIHN1cHBvbmdvIHNpYSB1biBoYXJkIHJlZnJlc2ggZSBtaSBmaWRvIGRlbCBmYXR0byBjaGUgbCd1dGVudGUgcG9zc2EgZW50cmFyY2lcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IEZpeGFyZSBtZWdsaW8gY29uY2F0ZW5hbmRvIHVuYSBwcm9taXNlIGNoZSB2YSBhIHByZW5kZXJlIGwnYWNjb3VudCBzY29wZSBzZSBzZXJ2ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hYy5Jbml0aWFsaXplZCAmJlxyXG4gICAgICAgICAgICAgICAgKCFpZGVudGl0eS5Sb2xlcyB8fCBpZGVudGl0eS5Sb2xlcy5sZW5ndGggPT0gMCkgJiZcclxuICAgICAgICAgICAgICAgICghaWRlbnRpdHkuUGVybWlzc2lvbnMgfHwgaWRlbnRpdHkuUGVybWlzc2lvbnMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBuZWwgc2l0byBvcmlnaW5hbGUgKG5vbiBobyBhcGVydG8gdW4gbmV3dGFiKSBibG9jY28gbGEgbmF2aWdhemlvbmVcclxuICAgICAgICAgICAgLy9TZSBobyBhcGVydG8gdW5hIG51b3ZhIHRhYiBpbnZlY2UgcmlzcGVkaXNjbyBhbCBsb2dpblxyXG4gICAgICAgICAgICBpZiAod2luZG93Lmhpc3RvcnkubGVuZ3RoID4gMiAmJiB0aGlzLmFjLmlzTG9nZ2VkSW4oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLnNpbXBsZUVycm9yKHRoaXMubGMubG9jKFwiWW91IGRvbid0IGhhdmUgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHZpZXcgdGhpcyBwYWdlLiBUaGUgbmF2aWdhdGlvbiBoYXMgYmVlbiBibG9ja2VkXCIpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJlZGlyZWN0SW5Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuTG9naW5Sb3V0ZSwgeyBmcm9tVXJsOiBmcm9tdXJsIH1dKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGNoZSB2aWVuZSBlc2VndWl0byBwcmltYSBjaGUgbGEgR3VhcmQgcmVpbmRpcml6emkgYWwgbG9naW5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uUmVkaXJlY3RJblByb2dyZXNzKCkge1xyXG4gICAgfVxyXG59Il19
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzQ29udHJvbFJvdXRlR3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvbGliL0FjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxNQUFNO0FBQ04sT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHOUQsUUFBUTtBQUNSLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7O0FBR3RDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQXdCaEM7O09BRUc7SUFDSCxZQUFvQixVQUEyQixFQUFVLEVBQXdCLEVBQVUsTUFBYyxFQUFrQyxNQUFjO1FBQXJJLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBckJ6Rzs7OztXQUlHO1FBQ08sZUFBVSxHQUFZLE9BQU8sQ0FBQztRQUV4Qzs7O1dBR0c7UUFDTyx1QkFBa0IsR0FBYSxFQUFFLENBQUM7UUFFNUM7O1dBRUc7UUFDTyxXQUFNLEdBQTBDLEVBQUUsQ0FBQztRQU16RCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksbUJBQW1CLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLEtBQTZCLEVBQUUsQ0FBc0I7UUFDbEUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxD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QkE0QnFHLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vQW5ndWxhclxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUNoaWxkLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLy9MaWJzXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vTW9kZWxzXHJcbmltcG9ydCB7IEFDQ19MT0NBTEUgfSBmcm9tIFwiLi90b2tlbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL2FjY2Vzcy1jb250cm9sLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFJvdXRlciBHdWFyZCBiYXNlIHBlciBwcm90ZWdnZXJlIGwnYWNjZXNzbyBhbGxlIHJvdXRlIGRlbGwnYXBwbGljYXppb25lLiBQZXIgdXRpbGl6emFybGEgw6ggc3VmZmljaWVudGUgZXJlZGl0YXJsYSBlLCBuZWwgY29zdHJ1dHRvcmUgZGVsbGEgY2xhc3NlXHJcbiAqIGNoZSBsYSBlcmVkaXRhdmFsb3JpenphcmUgbGEgdmFyaWFiaWxlIFJvdXRlcyBjb24gbGUgcm91dGUgcGVybWVzc2UgZGFsIG1vZHVsbyBlIGlsIHBlcm1lc3NvIHBlciBjdWkgc2kgdnVvbGUgcmlzZXJ2YXJlIGwnYWNjZXNzby4gQWQgZXNlbXBpbzpcclxuICogXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogQEluamVjdGFibGUoKVxyXG4gKiBleHBvcnQgY2xhc3MgSGFzQXV0aEd1YXJkQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJvdXRlckd1YXJkIHtcclxuICogICAgICBjb25zdHJ1Y3RvcihhY2M6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCByb3V0ZXI6IFJvdXRlciwgbXM6IE1lc3NhZ2VTZXJ2aWNlLCB0czogQmFzZVRva2VuU2VydmljZSkge1xyXG4gKiAgICAgICAgICBzdXBlcihtcywgYWNjLCByb3V0ZXIsIHRzKTtcclxuICogICAgICAgICAgdGhpcy5Sb3V0ZXMgPSBbXHJcbiAqICAgICAgICAgICAgICB7IHJvdXRlOiBcInBhZ2Vfcm91dGVcIiwgcGVybWlzc2lvbjogXCJQOnBlcm1fb25lXCIgfSxcclxuICogICAgICAgICAgICAgIHsgcm91dGU6IFwiKlwiLCBwZXJtaXNzaW9uOiBcIlI6cm9sZV9vbmVcIiB9XHJcbiAqICAgICAgICAgIF1cclxuICogICAgICB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sUm91dGVHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlQ2hpbGQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbGM6IExvY2FsaXphdGlvblNlcnZpY2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3V0ZSBkaSBsb2dpbiBjaGUgc2VydmUgcGVyIHJlaW5kaXJpenphcmUgYWxsYSBwYWdpbmEgZGkgbG9naW4gaW4gY2FzbyBkaSBmYWxsaW1lbnRvIGRlbCBjb250cm9sbG8gc3VpIFBlcm1lc3NpXHJcbiAgICAgKiBcclxuICAgICAqIEBkZWZhdWx0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBMb2dpblJvdXRlIDogc3RyaW5nID0gXCJsb2dpblwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVybWV0dGUgZGkgc3BlY2lmaWNhcmUgZGVsbGUgUm91dGUgc2VtcHJlIGNvbnNlbnRpdGUsIGFuY2hlIGEgbGl2ZWxsbyBkaSBcIlJhZGljZVwiLiBBZCBlc2VtcGlvIGxhIFJvb3QgXCJ0ZXN0XCIgcGVybWV0dGVyw6BcclxuICAgICAqIGwnYWNjZXNzbyBhIHR1dHRlIGxlIHJvdXRlIGNoZSBhbmNoZSBzb2xvIGluaXppYW5vIHBlciBcInRlc3RcIlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgQWx3YXlzQWxsb3dlZFJvb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRpIFJvdXRlIGNvbiBsYSBsb3JvIGVzcHJlc3Npb25lIGRpIGNvbnRyb2xsbyBwZXIgdmFsdXRhcmUgaSBwZXJtZXNzaVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgUm91dGVzOiB7IHJvdXRlOiBhbnk7IHBlcm1pc3Npb246IHN0cmluZzsgfVtdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbXNnU2VydmljZSA6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgQE9wdGlvbmFsKCkgQEluamVjdChBQ0NfTE9DQUxFKSBMT0NBTEU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubGMgPSBuZXcgTG9jYWxpemF0aW9uU2VydmljZShMT0NBTEUgPz8gJ2l0LUlUJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNhbkFjdGl2YXRlQ2hpbGQocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIF86IFJvdXRlclN0YXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB2YXIgdXJsID0gcm91dGUudXJsLmpvaW4oJy8nKTtcclxuICAgICAgICAvL1NlIGwnYXBwbGljYXppb25lIG5vbiDDqCBwcm9udGEgZSBub24gc3RvIG5hdmlnYW5kbyBuZWxsZSBwYWdpbmUgY29uc2VudGl0ZVxyXG4gICAgICAgIGlmICghdGhpcy5hYy5Jbml0aWFsaXplZCAmJiAhdGhpcy5BbHdheXNBbGxvd2VkUm9vdHMuZmluZChyID0+IHVybC5pbmRleE9mKHIpICE9IC0xKSlcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHZhciByb3V0ZU1hdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuUm91dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCByID0gdGhpcy5Sb3V0ZXNbaV07XHJcbiAgICAgICAgICAgIC8vU2UgZmFjY2lvIG1hdGNoIGNvbiBsYSByb3V0ZSBzaWduaWZpY2EgY2hlIGhvIG5hdmlnYXRvIGluIHVuYSBkZWxsZSByb3V0ZSBjb25vc2NpdXRlLCBhbHRyaW1lbnRpIGF2dmVydG8gbWEgbGFzY2lvIGFuZGFyZVxyXG4gICAgICAgICAgICBpZiAodXJsLmluZGV4T2Yoci5yb3V0ZSkgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJvdXRlTWF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVNYXRjaCh1cmwsIHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vU2Ugbm9uIGZhY2NpbyBuZXNzdW4gbWF0Y2ggbWEgaG8gdW5hIHJvdXRlIHdpbGRjYXJkICgqKSBwcmVuZG8gcXVlbGxhIGUgY29udHJvbGxvIHN1IHF1ZWxsYVxyXG4gICAgICAgIGlmICghcm91dGVNYXRjaGVkKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWxkY2FyZFJvdXRlID0gdGhpcy5Sb3V0ZXMuZmluZChyID0+IHIucm91dGUgPT0gXCIqXCIpO1xyXG4gICAgICAgICAgICBpZiAod2lsZGNhcmRSb3V0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZU1hdGNoKHVybCwgd2lsZGNhcmRSb3V0ZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTmF2aWdhaXpvbmUgYXZ2ZW51dGEgc3Ugcm91dGUgc2Nvbm9zY2l1dGE6IFwiICsgdXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVNYXRjaChmcm9tdXJsOiBzdHJpbmcsIHI6IGFueSkge1xyXG4gICAgICAgIGxldCBpZGVudGl0eSA9IHRoaXMuYWMuSWRlbnRpdHk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjLmhhcyhyLnBlcm1pc3Npb24pIHx8XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgIC8vIENvbnNpZGVybyBhbmNoZSBsYSBwb3NzaWJpbGl0w6AgZGkgYXZlcmUgbCdhY2Nlc3MgY29udHJvbCBpbml6aWFsaXp6YXRvIG1hIGNoZSBsJ2FjY291bnQgc2NvcGUgbm9uIHNpYSBhbmNvcmEgcHJlc2VudGVcclxuICAgICAgICAgICAgICAgIC8vIGluIHF1ZXN0byBjYXNvIHN1cHBvbmdvIHNpYSB1biBoYXJkIHJlZnJlc2ggZSBtaSBmaWRvIGRlbCBmYXR0byBjaGUgbCd1dGVudGUgcG9zc2EgZW50cmFyY2lcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IEZpeGFyZSBtZWdsaW8gY29uY2F0ZW5hbmRvIHVuYSBwcm9taXNlIGNoZSB2YSBhIHByZW5kZXJlIGwnYWNjb3VudCBzY29wZSBzZSBzZXJ2ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hYy5Jbml0aWFsaXplZCAmJlxyXG4gICAgICAgICAgICAgICAgKCFpZGVudGl0eS5Sb2xlcyB8fCBpZGVudGl0eS5Sb2xlcy5sZW5ndGggPT0gMCkgJiZcclxuICAgICAgICAgICAgICAgICghaWRlbnRpdHkuUGVybWlzc2lvbnMgfHwgaWRlbnRpdHkuUGVybWlzc2lvbnMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBuZWwgc2l0byBvcmlnaW5hbGUgKG5vbiBobyBhcGVydG8gdW4gbmV3dGFiKSBibG9jY28gbGEgbmF2aWdhemlvbmVcclxuICAgICAgICAgICAgLy9TZSBobyBhcGVydG8gdW5hIG51b3ZhIHRhYiBpbnZlY2UgcmlzcGVkaXNjbyBhbCBsb2dpblxyXG4gICAgICAgICAgICBpZiAod2luZG93Lmhpc3RvcnkubGVuZ3RoID4gMiAmJiB0aGlzLmFjLmlzTG9nZ2VkSW4oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLnNpbXBsZUVycm9yKHRoaXMubGMubG9jKFwiWW91IGRvbid0IGhhdmUgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHZpZXcgdGhpcyBwYWdlLiBUaGUgbmF2aWdhdGlvbiBoYXMgYmVlbiBibG9ja2VkXCIpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJlZGlyZWN0SW5Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuTG9naW5Sb3V0ZSwgeyBmcm9tVXJsOiBmcm9tdXJsIH1dKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGNoZSB2aWVuZSBlc2VndWl0byBwcmltYSBjaGUgbGEgR3VhcmQgcmVpbmRpcml6emkgYWwgbG9naW5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uUmVkaXJlY3RJblByb2dyZXNzKCkge1xyXG4gICAgfVxyXG59Il19
@@ -17,16 +17,19 @@ export class AccessControlDirective {
17
17
  this.templateRef = templateRef;
18
18
  this.viewContainer = viewContainer;
19
19
  this._ac = _ac;
20
+ /**
21
+ * Espressione da processare scritta come {Chiave}:{Valore}
22
+ *
23
+ * Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions.
24
+ *
25
+ * Nelle ultime versioni del template è anche presente di default la custom permission "X" che indica se l'applicaizone è Esterna o no
26
+ */
27
+ this.ac = null;
28
+ /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */
29
+ this.acAbsolute = false;
20
30
  }
21
- /**
22
- * Input autoreferenziale per la direttiva
23
- *
24
- * @param {string} expression espressione da processare scritta come {Chiave}:{Valore}
25
- *
26
- * Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions
27
- */
28
- set ac(expression) {
29
- var allow = this._ac.has(expression);
31
+ ngOnInit() {
32
+ var allow = this._ac.has(this.ac, this.acAbsolute);
30
33
  //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template
31
34
  if (allow)
32
35
  this.viewContainer.createEmbeddedView(this.templateRef);
@@ -34,14 +37,16 @@ export class AccessControlDirective {
34
37
  this.viewContainer.clear();
35
38
  }
36
39
  }
37
- AccessControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.AccessControlService }], target: i0.ɵɵFactoryTarget.Directive });
38
- AccessControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: AccessControlDirective, selector: "[ac]", inputs: { ac: "ac" }, ngImport: i0 });
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlDirective, decorators: [{
40
+ AccessControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.AccessControlService }], target: i0.ɵɵFactoryTarget.Directive });
41
+ AccessControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: AccessControlDirective, selector: "[ac]", inputs: { ac: "ac", acAbsolute: "acAbsolute" }, ngImport: i0 });
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlDirective, decorators: [{
40
43
  type: Directive,
41
44
  args: [{
42
45
  selector: '[ac]',
43
46
  }]
44
47
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.AccessControlService }]; }, propDecorators: { ac: [{
45
48
  type: Input
49
+ }], acAbsolute: [{
50
+ type: Input
46
51
  }] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNjZXNzLWNvbnRyb2wvc3JjL2xpYi9hY2Nlc3MtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFpQyxNQUFNLGVBQWUsQ0FBQzs7O0FBS2hGOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sc0JBQXNCO0lBRS9COzs7O09BSUc7SUFDSCxZQUFvQixXQUE2QixFQUFVLGFBQStCLEVBQVUsR0FBeUI7UUFBekcsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBc0I7SUFBSSxDQUFDO0lBRWxJOzs7Ozs7T0FNRztJQUNILElBQWEsRUFBRSxDQUFDLFVBQWtCO1FBQzlCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXJDLHFGQUFxRjtRQUVyRixJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7WUFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQyxDQUFDOztvSEF2QlEsc0JBQXNCO3dHQUF0QixzQkFBc0I7NEZBQXRCLHNCQUFzQjtrQkFIbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsTUFBTTtpQkFDbkI7b0tBaUJnQixFQUFFO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIH0gZnJvbSBcIi4vYWNjZXNzLWNvbnRyb2wuc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIERpcmV0dGl2YSBjaGUgcGVybWV0dGUgZGkgZ2VzdGlyZSBpbCBjb250cm9sbG8gYWNjZXNzaSBzdSBjb21wb25lbnRpIEhUTUwuIFxyXG4gKiBcclxuICogUGVyIGdsaSBlc2VtcGkgZGkgdXRpbGl6em8gZmFyZSByaWZlcmltZW50byBhbCBSRUFETUUuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2FjXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sRGlyZWN0aXZlIHtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZSBcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHByaXZhdGUgX2FjOiBBY2Nlc3NDb250cm9sU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnB1dCBhdXRvcmVmZXJlbnppYWxlIHBlciBsYSBkaXJldHRpdmFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gIGVzcHJlc3Npb25lIGRhIHByb2Nlc3NhcmUgc2NyaXR0YSBjb21lIHtDaGlhdmV9OntWYWxvcmV9XHJcbiAgICAgKiBcclxuICAgICAqIExlIHtDaGlhdmV9IGRpc3BvbmliaWxpIHNvbm8gZGkgZGVmYXVsdCBcIlJcIiBwZXIgaSBydW9saSBlIFwiUFwiIHBlciBpIHBlcm1lc3NpLiDDiCBwb3NzaWJpbGUgZXNwYW5kZXJsZSBjb24gbGUgQ3VzdG9tIFBlcm1pc3Npb25zXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBhYyhleHByZXNzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxsb3cgPSB0aGlzLl9hYy5oYXMoZXhwcmVzc2lvbik7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gaSBwZXJtZXNzaSwgcHJvc2VndW8gY3JlYW5kbyBsYSB2aXN0YSBuZWwgRE9NLCBhbHRyaW1lbnRpIHJpbXVvdm8gaWwgdGVtcGxhdGVcclxuXHJcbiAgICAgICAgaWYgKGFsbG93KSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xyXG4gICAgICAgIGVsc2UgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICB9XHJcbn0iXX0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNjZXNzLWNvbnRyb2wvc3JjL2xpYi9hY2Nlc3MtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFpQyxNQUFNLGVBQWUsQ0FBQzs7O0FBS2hGOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sc0JBQXNCO0lBYy9COzs7O09BSUc7SUFDSCxZQUFvQixXQUE2QixFQUFVLGFBQStCLEVBQVUsR0FBeUI7UUFBekcsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBc0I7UUFqQjdIOzs7Ozs7V0FNRztRQUNNLE9BQUUsR0FBWSxJQUFJLENBQUM7UUFFNUIsbUpBQW1KO1FBQzFJLGVBQVUsR0FBWSxLQUFLLENBQUM7SUFPNEYsQ0FBQztJQUdsSSxRQUFRO1FBQ0osSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbkQscUZBQXFGO1FBRXJGLElBQUksS0FBSztZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztZQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BDLENBQUM7O21IQTdCUSxzQkFBc0I7dUdBQXRCLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQUhsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxNQUFNO2lCQUNuQjtvS0FVWSxFQUFFO3NCQUFWLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tIFwiLi9hY2Nlc3MtY29udHJvbC5zZXJ2aWNlXCI7XHJcblxyXG4vKipcclxuICogRGlyZXR0aXZhIGNoZSBwZXJtZXR0ZSBkaSBnZXN0aXJlIGlsIGNvbnRyb2xsbyBhY2Nlc3NpIHN1IGNvbXBvbmVudGkgSFRNTC4gXHJcbiAqIFxyXG4gKiBQZXIgZ2xpIGVzZW1waSBkaSB1dGlsaXp6byBmYXJlIHJpZmVyaW1lbnRvIGFsIFJFQURNRS5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbYWNdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xEaXJlY3RpdmUge1xyXG4gICAgXHJcbiAgICAvKiogXHJcbiAgICAgKiBFc3ByZXNzaW9uZSBkYSBwcm9jZXNzYXJlIHNjcml0dGEgY29tZSB7Q2hpYXZlfTp7VmFsb3JlfVxyXG4gICAgICogXHJcbiAgICAgKiBMZSB7Q2hpYXZlfSBkaXNwb25pYmlsaSBzb25vIGRpIGRlZmF1bHQgXCJSXCIgcGVyIGkgcnVvbGkgZSBcIlBcIiBwZXIgaSBwZXJtZXNzaS4gw4ggcG9zc2liaWxlIGVzcGFuZGVybGUgY29uIGxlIEN1c3RvbSBQZXJtaXNzaW9ucy5cclxuICAgICAqIFxyXG4gICAgICogTmVsbGUgdWx0aW1lIHZlcnNpb25pIGRlbCB0ZW1wbGF0ZSDDqCBhbmNoZSBwcmVzZW50ZSBkaSBkZWZhdWx0IGxhIGN1c3RvbSBwZXJtaXNzaW9uIFwiWFwiIGNoZSBpbmRpY2Egc2UgbCdhcHBsaWNhaXpvbmUgw6ggRXN0ZXJuYSBvIG5vXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGFjIDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICAvKiogSW5kaWNhIGNoZSBsJ2VzcG9yZXNzaW9uZSAqKmFjKiogw6ggYXNzb2x1dGEsIGNpb8OoIGNoZSBub24gcHXDsiBlc3NlcmUgbW9kaWZpY2F0YSBpbnRlcm5hbWVudGUgYWQgZXNlbXBpbyBwZXIgYWdnaXVuZ2VyZSBjb25kaXppb25pIGRpIGRlZmF1bHQgKi9cclxuICAgIEBJbnB1dCgpIGFjQWJzb2x1dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBfYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlKSB7IH1cclxuXHJcblxyXG4gICAgbmdPbkluaXQoKXtcclxuICAgICAgICB2YXIgYWxsb3cgPSB0aGlzLl9hYy5oYXModGhpcy5hYywgdGhpcy5hY0Fic29sdXRlKTtcclxuXHJcbiAgICAgICAgLy9TZSBobyBpIHBlcm1lc3NpLCBwcm9zZWd1byBjcmVhbmRvIGxhIHZpc3RhIG5lbCBET00sIGFsdHJpbWVudGkgcmltdW92byBpbCB0ZW1wbGF0ZVxyXG5cclxuICAgICAgICBpZiAoYWxsb3cpIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbn0iXX0=
@@ -21,10 +21,10 @@ export class AccessControlModule {
21
21
  };
22
22
  }
23
23
  }
24
- AccessControlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
- AccessControlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, declarations: [AccessControlDirective, ContextAwareDirective], imports: [LocalizationModule], exports: [AccessControlDirective, ContextAwareDirective] });
26
- AccessControlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, imports: [LocalizationModule] });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, decorators: [{
24
+ AccessControlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
+ AccessControlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, declarations: [AccessControlDirective, ContextAwareDirective], imports: [LocalizationModule], exports: [AccessControlDirective, ContextAwareDirective] });
26
+ AccessControlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, imports: [LocalizationModule] });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, decorators: [{
28
28
  type: NgModule,
29
29
  args: [{
30
30
  imports: [LocalizationModule],
@@ -32,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
32
32
  exports: [AccessControlDirective, ContextAwareDirective]
33
33
  }]
34
34
  }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNjZXNzLWNvbnRyb2wvc3JjL2xpYi9hY2Nlc3MtY29udHJvbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFPbEUsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWtDO1FBQy9DLE9BQU87WUFDTCxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLFNBQVMsRUFBRTtnQkFDVCxvQkFBb0I7Z0JBQ3BCLHVCQUF1QjtnQkFDdkIsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDNUQsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRTtnQkFDL0QsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxFQUFFO2dCQUNyRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSwrQkFBK0IsSUFBSSxJQUFJLEVBQUU7YUFDeEY7U0FDRixDQUFDO0lBQ0osQ0FBQzs7aUhBYlUsbUJBQW1CO2tIQUFuQixtQkFBbUIsaUJBSGYsc0JBQXNCLEVBQUUscUJBQXFCLGFBRGxELGtCQUFrQixhQUVuQixzQkFBc0IsRUFBRSxxQkFBcUI7a0hBRTNDLG1CQUFtQixZQUpwQixrQkFBa0I7NEZBSWpCLG1CQUFtQjtrQkFML0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDN0IsWUFBWSxFQUFFLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUM7b0JBQzdELE9BQU8sRUFBQyxDQUFDLHNCQUFzQixFQUFFLHFCQUFxQixDQUFDO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2FsaXphdGlvbk1vZHVsZSB9IGZyb20gJ0Blc2ZhZW56YS9sb2NhbGl6YXRpb25zJztcclxuaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEFDQ19MT0NBTEUsIEFDQ19DVVNUT01LRVksIEFDQ19ERUZfQ09ORCwgQUNDX0RFRl9DT05EX09QIH0gZnJvbSAnLi90b2tlbnMnO1xyXG5cclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbE1vZHVsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL0FjY2Vzc0NvbnRyb2xNb2R1bGVDb25maWcnO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gJy4vYWNjZXNzLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkIH0gZnJvbSAnLi9BY2Nlc3NDb250cm9sUm91dGVHdWFyZCc7XHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2FjY2Vzcy1jb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRleHRBd2FyZURpcmVjdGl2ZSB9IGZyb20gJy4vY29udGV4dC1hd2FyZS5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbTG9jYWxpemF0aW9uTW9kdWxlXSxcclxuICBkZWNsYXJhdGlvbnM6IFtBY2Nlc3NDb250cm9sRGlyZWN0aXZlLCBDb250ZXh0QXdhcmVEaXJlY3RpdmVdLFxyXG4gIGV4cG9ydHM6W0FjY2Vzc0NvbnRyb2xEaXJlY3RpdmUsIENvbnRleHRBd2FyZURpcmVjdGl2ZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEFjY2Vzc0NvbnRyb2xNb2R1bGVDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFjY2Vzc0NvbnRyb2xNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBBY2Nlc3NDb250cm9sTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBBY2Nlc3NDb250cm9sU2VydmljZSxcclxuICAgICAgICBBY2Nlc3NDb250cm9sUm91dGVHdWFyZCxcclxuICAgICAgICB7IHByb3ZpZGU6IEFDQ19MT0NBTEUsIHVzZVZhbHVlOiBjb25maWc/LmxvY2FsZSB8fCAnaXQtSVQnIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBBQ0NfQ1VTVE9NS0VZLCB1c2VWYWx1ZTogY29uZmlnPy5jdXN0b21LZXkgfHwgbnVsbCB9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogQUNDX0RFRl9DT05ELCB1c2VWYWx1ZTogY29uZmlnPy5kZWZhdWx0Q29uZGl0aW9uIHx8IG51bGwgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEFDQ19ERUZfQ09ORF9PUCwgdXNlVmFsdWU6IGNvbmZpZz8uZGVmYXVsdENvbmRpdGlvbkxvZ2ljYWxPcGVyYXRvciB8fCAnfHwnIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn0iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNjZXNzLWNvbnRyb2wvc3JjL2xpYi9hY2Nlc3MtY29udHJvbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFPbEUsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWtDO1FBQy9DLE9BQU87WUFDTCxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLFNBQVMsRUFBRTtnQkFDVCxvQkFBb0I7Z0JBQ3BCLHVCQUF1QjtnQkFDdkIsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDNUQsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRTtnQkFDL0QsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxFQUFFO2dCQUNyRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSwrQkFBK0IsSUFBSSxJQUFJLEVBQUU7YUFDeEY7U0FDRixDQUFDO0lBQ0osQ0FBQzs7Z0hBYlUsbUJBQW1CO2lIQUFuQixtQkFBbUIsaUJBSGYsc0JBQXNCLEVBQUUscUJBQXFCLGFBRGxELGtCQUFrQixhQUVuQixzQkFBc0IsRUFBRSxxQkFBcUI7aUhBRTNDLG1CQUFtQixZQUpwQixrQkFBa0I7MkZBSWpCLG1CQUFtQjtrQkFML0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDN0IsWUFBWSxFQUFFLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUM7b0JBQzdELE9BQU8sRUFBQyxDQUFDLHNCQUFzQixFQUFFLHFCQUFxQixDQUFDO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2FsaXphdGlvbk1vZHVsZSB9IGZyb20gJ0Blc2ZhZW56YS9sb2NhbGl6YXRpb25zJztcclxuaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEFDQ19MT0NBTEUsIEFDQ19DVVNUT01LRVksIEFDQ19ERUZfQ09ORCwgQUNDX0RFRl9DT05EX09QIH0gZnJvbSAnLi90b2tlbnMnO1xyXG5cclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbE1vZHVsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL0FjY2Vzc0NvbnRyb2xNb2R1bGVDb25maWcnO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gJy4vYWNjZXNzLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkIH0gZnJvbSAnLi9BY2Nlc3NDb250cm9sUm91dGVHdWFyZCc7XHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2FjY2Vzcy1jb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRleHRBd2FyZURpcmVjdGl2ZSB9IGZyb20gJy4vY29udGV4dC1hd2FyZS5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbTG9jYWxpemF0aW9uTW9kdWxlXSxcclxuICBkZWNsYXJhdGlvbnM6IFtBY2Nlc3NDb250cm9sRGlyZWN0aXZlLCBDb250ZXh0QXdhcmVEaXJlY3RpdmVdLFxyXG4gIGV4cG9ydHM6W0FjY2Vzc0NvbnRyb2xEaXJlY3RpdmUsIENvbnRleHRBd2FyZURpcmVjdGl2ZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEFjY2Vzc0NvbnRyb2xNb2R1bGVDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFjY2Vzc0NvbnRyb2xNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBBY2Nlc3NDb250cm9sTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBBY2Nlc3NDb250cm9sU2VydmljZSxcclxuICAgICAgICBBY2Nlc3NDb250cm9sUm91dGVHdWFyZCxcclxuICAgICAgICB7IHByb3ZpZGU6IEFDQ19MT0NBTEUsIHVzZVZhbHVlOiBjb25maWc/LmxvY2FsZSB8fCAnaXQtSVQnIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBBQ0NfQ1VTVE9NS0VZLCB1c2VWYWx1ZTogY29uZmlnPy5jdXN0b21LZXkgfHwgbnVsbCB9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogQUNDX0RFRl9DT05ELCB1c2VWYWx1ZTogY29uZmlnPy5kZWZhdWx0Q29uZGl0aW9uIHx8IG51bGwgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEFDQ19ERUZfQ09ORF9PUCwgdXNlVmFsdWU6IGNvbmZpZz8uZGVmYXVsdENvbmRpdGlvbkxvZ2ljYWxPcGVyYXRvciB8fCAnfHwnIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn0iXX0=
@@ -38,6 +38,12 @@ export class AccessControlService {
38
38
  * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom
39
39
  */
40
40
  initializeCustomPermissions(customPermissions) {
41
+ for (let i = 0; i < customPermissions.length; i++) {
42
+ if (customPermissions[i].key.length > 1) {
43
+ console.error("[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.");
44
+ return;
45
+ }
46
+ }
41
47
  this.taggedItemsCache = customPermissions;
42
48
  this.InitializedCustom = true;
43
49
  }
@@ -53,7 +59,7 @@ export class AccessControlService {
53
59
  *
54
60
  * @ignore
55
61
  */
56
- hasACExpression(expression) {
62
+ hasACExpression(expression, absolute = false) {
57
63
  if (!this.Initialized)
58
64
  console.error("Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service");
59
65
  if (!expression)
@@ -62,9 +68,11 @@ export class AccessControlService {
62
68
  console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
63
69
  return true;
64
70
  }
65
- if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP)
71
+ // Per le espressioni di visibilità "dirette" sulla X ignoro le condizioni di default perché sono condizioni fisiche piuttosto che logiche
72
+ // Significa che siamo o dentro o fuori da un iframe e questo ovviamente va a soprassedere eventuali condizioni logiche del tipo "sono Jace Admin"
73
+ if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute && expression != 'X:0' && expression != 'X:1')
66
74
  expression = `(${expression}) ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND}`;
67
- //Espressione già valutata, non serve rivalutarla
75
+ // Espressione già valutata, non serve rivalutarla
68
76
  if (this.cache[expression])
69
77
  return this.cache[expression];
70
78
  var RolesPermissionsRegexp = /.:[^|&()]+/g;
@@ -86,7 +94,7 @@ export class AccessControlService {
86
94
  return ret;
87
95
  }
88
96
  /**
89
- * Utilizzato da hasACExpression
97
+ * Utilizzato da hasACExpression dentro eval
90
98
  *
91
99
  * @ignore
92
100
  */
@@ -98,7 +106,7 @@ export class AccessControlService {
98
106
  return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;
99
107
  }
100
108
  /**
101
- * Utilizzato da hasACExpression
109
+ * Utilizzato da hasACExpression dentro eval
102
110
  *
103
111
  * @ignore
104
112
  */
@@ -110,7 +118,7 @@ export class AccessControlService {
110
118
  return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;
111
119
  }
112
120
  /**
113
- * Utilizzato da hasACExpression
121
+ * Utilizzato da hasACExpression dentro eval
114
122
  *
115
123
  * @ignore
116
124
  */
@@ -126,13 +134,13 @@ export class AccessControlService {
126
134
  /**
127
135
  * Entry point che controlla un'espressione identificante un permesso, ad esempio "P:visualizzazione" controlla che l'utente collegato abbia un permesso che si chiama "visualizzazione"
128
136
  */
129
- has(expr) {
130
- return this.hasACExpression(expr);
137
+ has(expr, absolute = false) {
138
+ return this.hasACExpression(expr, absolute);
131
139
  }
132
140
  }
133
- AccessControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService, deps: [{ token: ACC_DEF_COND, optional: true }, { token: ACC_DEF_COND_OP, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
134
- AccessControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService });
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService, decorators: [{
141
+ AccessControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService, deps: [{ token: ACC_DEF_COND, optional: true }, { token: ACC_DEF_COND_OP, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
142
+ AccessControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService });
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService, decorators: [{
136
144
  type: Injectable
137
145
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
138
146
  type: Optional
@@ -145,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
145
153
  type: Inject,
146
154
  args: [ACC_DEF_COND_OP]
147
155
  }] }]; } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUV6RDs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUF1Qi9CLGNBQWM7SUFDZCxZQUFzRCxZQUFvQixFQUErQyxlQUF1QjtRQUExRixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUErQyxvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQXRCaEo7O1dBRUc7UUFDSSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUVwQzs7V0FFRztRQUNJLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUUxQyxjQUFjO1FBQ04sVUFBSyxHQUFPLEVBQUUsQ0FBQztRQUV2QixjQUFjO1FBQ04scUJBQWdCLEdBQXVDLEVBQUUsQ0FBQztJQVFtRixDQUFDO0lBRXRKOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxRQUFvRDtRQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDJCQUEyQixDQUFDLGlCQUFxRDtRQUN0RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxlQUFlLENBQUMsVUFBa0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUhBQXVILENBQUMsQ0FBQztRQUV6SSxJQUFJLENBQUMsVUFBVTtZQUNiLE9BQU8sSUFBSSxDQUFDO1FBRWQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxrR0FBa0csQ0FBQyxDQUFBO1lBQ2hILE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWU7WUFDMUMsVUFBVSxHQUFHLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTlFLGlEQUFpRDtRQUNqRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxJQUFJLHNCQUFzQixHQUFHLGFBQWEsQ0FBQztRQUUzQyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLE9BQU87WUFDVixNQUFNLHlDQUF5QyxHQUFHLFVBQVUsR0FBRyxnREFBZ0QsQ0FBQztRQUVsSCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRztnQkFDbEIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztpQkFDbkYsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRztnQkFDdkIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQzs7Z0JBRTVGLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN4SCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksR0FBRyxHQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxlQUFlO1FBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLE9BQU8sQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0dBQWtHLENBQUMsQ0FBQTtZQUNoSCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWEsQ0FBQyxVQUFrQjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLGtHQUFrRyxDQUFDLENBQUE7WUFDaEgsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEksQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxTQUFTLENBQUMsS0FBYSxFQUFFLEdBQVc7UUFDMUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLO1lBQ1IsT0FBTyxJQUFJLENBQUM7YUFDVCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztZQUN4QixPQUFPLEtBQUssQ0FBQzs7WUFFYixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUcsQ0FBQyxJQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDOztrSEFuSlUsb0JBQW9CLGtCQXdCQyxZQUFZLDZCQUFvRCxlQUFlO3NIQXhCcEcsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVU7OzBCQXlCSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFlBQVk7OzBCQUFpQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBQ0NfREVGX0NPTkQsIEFDQ19ERUZfQ09ORF9PUCB9IGZyb20gXCIuL3Rva2Vuc1wiO1xyXG5cclxuLyoqXHJcbiAqIEVudHJ5cG9pbnQgZGkgdHV0dGUgbGUgb3BlcmF6aW9uaSBlc3Bvc3RlIGRhbGxhIGxpYnJlcmlhIGFjY2Vzcy1jb250cm9sXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBsJ0lkZW50aXR5IMOoIHN0YXRhIGluaXppYWxpenphdGFcclxuICAgKi9cclxuICBwdWJsaWMgSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIHNvbm8gc3RhdGUgZWZmZXR0dWF0ZSBpbml6aWFsaXp6YXppb25pIGRpIEN1c3RvbSBQZXJtaXNzaW9uc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJbml0aWFsaXplZEN1c3RvbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgY2FjaGU6IHt9ID0ge307XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSB0YWdnZWRJdGVtc0NhY2hlOiB7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElkZW50aXR5IGFzc29jaWF0YSBhIHF1ZXN0J2lzdGFuemEgZGVsIFNlcnZpemlvIEFjY2VzcyBDb250cm9sLCB1dGlsZSBzZSBzaSB2dW9sZSBhdmVyZSBhY2Nlc3NvIGEgUnVvbGkgZSBQZXJtZXNzaSBkaXJldHRhbWVudGUgZGEgcXVpLCBwZXIgcXVhbHNpdm9nbGlhIG1vdGl2b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9O1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0RFRl9DT05EKSBwcml2YXRlIEFDQ19ERUZfQ09ORDogc3RyaW5nLCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDQ19ERUZfQ09ORF9PUCkgcHJpdmF0ZSBBQ0NfREVGX0NPTkRfT1A6IHN0cmluZywpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml6aWFsaXp6YSBsJ0lkZW50aXR5IGRlbCBzZXJ2aXppbyBjb24gaWwgbW9kZWxsbyBzcGVjaWZpY2F0b1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbXMge3sgUm9sZXM6IHN0cmluZ1tdLCBQZXJtaXNzaW9uczogc3RyaW5nW10gfX0gaWRlbnRpdHkgSWRlbnRpdMOgIGFwcGxpY2F0aXZhIGNvbiBydW9saSBlIHBlcm1lc3NpXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRpYWxpemVJZGVudGl0eShpZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9KSB7XHJcbiAgICB0aGlzLklkZW50aXR5ID0gaWRlbnRpdHk7XHJcbiAgICB0aGlzLkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXppYWxpenphIGkgcGVybWVzc2kgQ3VzdG9tIGRlbCBzZXJ2aXppbyBjb24gaWwgbW9kZWxsbyBzcGVjaWZpY2F0b1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7eyBrZXk6IHN0cmluZywgaXRlbXM6IHN0cmluZ1tdIH1bXX0gY3VzdG9tUGVybWlzc2lvbnMgUGVybWVzc2kgQ3VzdG9tXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRpYWxpemVDdXN0b21QZXJtaXNzaW9ucyhjdXN0b21QZXJtaXNzaW9uczogeyBrZXk6IHN0cmluZywgaXRlbXM6IHN0cmluZ1tdIH1bXSkge1xyXG4gICAgdGhpcy50YWdnZWRJdGVtc0NhY2hlID0gY3VzdG9tUGVybWlzc2lvbnM7XHJcbiAgICB0aGlzLkluaXRpYWxpemVkQ3VzdG9tID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBuZWxsYSBzZXNzaW9uZSBhdHR1YWxlIGVzaXN0ZSB1biB1dGVudGUgbG9nZ2F0by4gRmEgdW4gc2VtcGxpY2UgY29udHJvbGxvIGRpIHByZXNlbnphIHN1bGwnSWRlbnRpdHlcclxuICAgKi9cclxuICBwdWJsaWMgaXNMb2dnZWRJbigpIHtcclxuICAgIHJldHVybiAhIXRoaXMuSWRlbnRpdHk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHByZXNzaW9uIMOoIHNjcml0dGEgdGlwbyAtLT4gUjpSb2xlMSAmJiBQOlBlcm1pc3Npb24xIHx8IChSOlJvbGUyICYmIFA6UGVybWlzc2lvbjEpXHJcbiAgICogUXVpbmRpIHBpdXR0b3N0byBjaGUgaW1wbGVtZW50YXJzaSB1biBwYXJzZXIgZGVsbGEgbWFkb25uYSBpbiBzdGlsZSBBbGVzc2FuZHJvIHByZW5kbyBsYSBzdHJhZGEgc3Ryb256YSBlIHZlbG9jZSBjb24gbCdldmFsIDpQXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFzQUNFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLkluaXRpYWxpemVkKVxyXG4gICAgICBjb25zb2xlLmVycm9yKFwiQWNjZXNzIENvbnRyb2wgU3lzdGVtIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4gQ2FsbCB0aGlzLmFjY2Vzc0NvbnRyb2wuaW5pdGlhbGl6ZSguLi4sIC4uLikgYmVmb3JlIHVzaW5nIHRoZSBzZXJ2aWNlXCIpO1xyXG5cclxuICAgIGlmICghZXhwcmVzc2lvbilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLklkZW50aXR5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkVsZW1lbnRvIElkZW50aXR5IG5vbiBzcGVjaWZpY2F0byBpbiBBY2Nlc3MgQ29udHJvbC4gR2xpIGFjY2Vzc2kgc2FyYW5ubyB0dXR0aSBsaWJlcmkgZGkgZGVmYXVsdFwiKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLkFDQ19ERUZfQ09ORCAmJiB0aGlzLkFDQ19ERUZfQ09ORF9PUClcclxuICAgICAgZXhwcmVzc2lvbiA9IGAoJHtleHByZXNzaW9ufSkgJHt0aGlzLkFDQ19ERUZfQ09ORF9PUH0gJHt0aGlzLkFDQ19ERUZfQ09ORH1gO1xyXG4gICAgICBcclxuICAgIC8vRXNwcmVzc2lvbmUgZ2nDoCB2YWx1dGF0YSwgbm9uIHNlcnZlIHJpdmFsdXRhcmxhXHJcbiAgICBpZiAodGhpcy5jYWNoZVtleHByZXNzaW9uXSlcclxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbZXhwcmVzc2lvbl07XHJcblxyXG4gICAgdmFyIFJvbGVzUGVybWlzc2lvbnNSZWdleHAgPSAvLjpbXnwmKCldKy9nO1xyXG5cclxuICAgIHZhciBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChSb2xlc1Blcm1pc3Npb25zUmVnZXhwKTtcclxuICAgIFxyXG4gICAgaWYgKCFtYXRjaGVzKVxyXG4gICAgICB0aHJvdyBcIkVzcHJlc3Npb25lIEFjY2VzcyBDb250cm9sIG5vbiB2YWxpZGE6IFwiICsgZXhwcmVzc2lvbiArIFwiLiBBc3NpY3VyYXJzaSBjaGUgc2lhIHNjcml0dGEgaW4gbW9kbyBjb3JyZXR0b1wiO1xyXG5cclxuICAgIG1hdGNoZXMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgdmFyIHNwbGl0cyA9IHQuc3BsaXQoJzonKTtcclxuICAgICAgaWYgKHNwbGl0c1swXSA9PSBcIlJcIilcclxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgZWxzZSBpZiAoc3BsaXRzWzBdID09IFwiUFwiKVxyXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UodC50cmltKCksIFwidGhpcy5oYXNQZXJtaXNzaW9uKCdcIiArIHNwbGl0c1sxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgXCJ0aGlzLmhhc0N1c3RvbSgnXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInLCAnXCIgKyBzcGxpdHNbMF0udHJpbSgpICsgXCInKVwiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciByZXQgPSA8Ym9vbGVhbj5ldmFsKGV4cHJlc3Npb24pO1xyXG4gICAgLy8gQ2FjaGUgdmFsb3JlXHJcbiAgICB0aGlzLmNhY2hlW2V4cHJlc3Npb25dID0gcmV0O1xyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFV0aWxpenphdG8gZGEgaGFzQUNFeHByZXNzaW9uXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5JZGVudGl0eS5Sb2xlcyAmJiB0aGlzLklkZW50aXR5LlJvbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5JZGVudGl0eS5Sb2xlcy5pbmRleE9mKHJvbGUpICE9IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6emF0byBkYSBoYXNBQ0V4cHJlc3Npb25cclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLklkZW50aXR5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkVsZW1lbnRvIElkZW50aXR5IG5vbiBzcGVjaWZpY2F0byBpbiBBY2Nlc3MgQ29udHJvbC4gR2xpIGFjY2Vzc2kgc2FyYW5ubyB0dXR0aSBsaWJlcmkgZGkgZGVmYXVsdFwiKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zICYmIHRoaXMuSWRlbnRpdHkuUGVybWlzc2lvbnMubGVuZ3RoID4gMCAmJiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zLmluZGV4T2YocGVybWlzc2lvbikgIT0gLTE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVdGlsaXp6YXRvIGRhIGhhc0FDRXhwcmVzc2lvblxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0N1c3RvbSh2YWx1ZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGl0ZW1zID0gdGhpcy50YWdnZWRJdGVtc0NhY2hlLmZpbmQodCA9PiB0LmtleSA9PSB0YWcpPy5pdGVtcztcclxuICAgIGlmICghaXRlbXMpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuICEhaXRlbXMuZmluZCh0ID0+IHQgPT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnkgcG9pbnQgY2hlIGNvbnRyb2xsYSB1bidlc3ByZXNzaW9uZSBpZGVudGlmaWNhbnRlIHVuIHBlcm1lc3NvLCBhZCBlc2VtcGlvIFwiUDp2aXN1YWxpenphemlvbmVcIiBjb250cm9sbGEgY2hlIGwndXRlbnRlIGNvbGxlZ2F0byBhYmJpYSB1biBwZXJtZXNzbyBjaGUgc2kgY2hpYW1hIFwidmlzdWFsaXp6YXppb25lXCJcclxuICAgKi9cclxuICBwdWJsaWMgaGFzKGV4cHI6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQUNFeHByZXNzaW9uKGV4cHIpO1xyXG4gIH1cclxufSJdfQ==
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUV6RDs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUF1Qi9CLGNBQWM7SUFDZCxZQUFzRCxZQUFvQixFQUErQyxlQUF1QjtRQUExRixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUErQyxvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQXRCaEo7O1dBRUc7UUFDSSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUVwQzs7V0FFRztRQUNJLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUUxQyxjQUFjO1FBQ04sVUFBSyxHQUFPLEVBQUUsQ0FBQztRQUV2QixjQUFjO1FBQ04scUJBQWdCLEdBQXVDLEVBQUUsQ0FBQztJQVFtRixDQUFDO0lBRXRKOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxRQUFvRDtRQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDJCQUEyQixDQUFDLGlCQUFxRDtRQUN0RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pELElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZD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RUQ7O09BRUc7SUFDSSxHQUFHLENBQUMsSUFBWSxFQUFFLFdBQW9CLEtBQUs7UUFDaEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDOztpSEE1SlUsb0JBQW9CLGtCQXdCQyxZQUFZLDZCQUFvRCxlQUFlO3FIQXhCcEcsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVU7OzBCQXlCSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFlBQVk7OzBCQUFpQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBQ0NfREVGX0NPTkQsIEFDQ19ERUZfQ09ORF9PUCB9IGZyb20gXCIuL3Rva2Vuc1wiO1xyXG5cclxuLyoqXHJcbiAqIEVudHJ5cG9pbnQgZGkgdHV0dGUgbGUgb3BlcmF6aW9uaSBlc3Bvc3RlIGRhbGxhIGxpYnJlcmlhIGFjY2Vzcy1jb250cm9sXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBsJ0lkZW50aXR5IMOoIHN0YXRhIGluaXppYWxpenphdGFcclxuICAgKi9cclxuICBwdWJsaWMgSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIHNvbm8gc3RhdGUgZWZmZXR0dWF0ZSBpbml6aWFsaXp6YXppb25pIGRpIEN1c3RvbSBQZXJtaXNzaW9uc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJbml0aWFsaXplZEN1c3RvbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgY2FjaGU6IHt9ID0ge307XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSB0YWdnZWRJdGVtc0NhY2hlOiB7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElkZW50aXR5IGFzc29jaWF0YSBhIHF1ZXN0J2lzdGFuemEgZGVsIFNlcnZpemlvIEFjY2VzcyBDb250cm9sLCB1dGlsZSBzZSBzaSB2dW9sZSBhdmVyZSBhY2Nlc3NvIGEgUnVvbGkgZSBQZXJtZXNzaSBkaXJldHRhbWVudGUgZGEgcXVpLCBwZXIgcXVhbHNpdm9nbGlhIG1vdGl2b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9O1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0RFRl9DT05EKSBwcml2YXRlIEFDQ19ERUZfQ09ORDogc3RyaW5nLCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDQ19ERUZfQ09ORF9PUCkgcHJpdmF0ZSBBQ0NfREVGX0NPTkRfT1A6IHN0cmluZywpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml6aWFsaXp6YSBsJ0lkZW50aXR5IGRlbCBzZXJ2aXppbyBjb24gaWwgbW9kZWxsbyBzcGVjaWZpY2F0b1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbXMge3sgUm9sZXM6IHN0cmluZ1tdLCBQZXJtaXNzaW9uczogc3RyaW5nW10gfX0gaWRlbnRpdHkgSWRlbnRpdMOgIGFwcGxpY2F0aXZhIGNvbiBydW9saSBlIHBlcm1lc3NpXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRpYWxpemVJZGVudGl0eShpZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9KSB7XHJcbiAgICB0aGlzLklkZW50aXR5ID0gaWRlbnRpdHk7XHJcbiAgICB0aGlzLkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXppYWxpenphIGkgcGVybWVzc2kgQ3VzdG9tIGRlbCBzZXJ2aXppbyBjb24gaWwgbW9kZWxsbyBzcGVjaWZpY2F0b1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7eyBrZXk6IHN0cmluZywgaXRlbXM6IHN0cmluZ1tdIH1bXX0gY3VzdG9tUGVybWlzc2lvbnMgUGVybWVzc2kgQ3VzdG9tXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRpYWxpemVDdXN0b21QZXJtaXNzaW9ucyhjdXN0b21QZXJtaXNzaW9uczogeyBrZXk6IHN0cmluZywgaXRlbXM6IHN0cmluZ1tdIH1bXSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXN0b21QZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY3VzdG9tUGVybWlzc2lvbnNbaV0ua2V5Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0Blc2ZhZW56YS9hY2Nlc3MtY29udHJvbF0gQ3VzdG9tIHBlcm1pc3Npb24gaW5pdGlhbGl6ZWQgd2l0aCBrZXlzIGxvbmdlciB0aGFuIGEgc2luZ2xlIGNoYXJhY3RlcnMuIElnbm9yaW5nIEVWRVJZVEhJTkcuXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFnZ2VkSXRlbXNDYWNoZSA9IGN1c3RvbVBlcm1pc3Npb25zO1xyXG4gICAgdGhpcy5Jbml0aWFsaXplZEN1c3RvbSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2UgbmVsbGEgc2Vzc2lvbmUgYXR0dWFsZSBlc2lzdGUgdW4gdXRlbnRlIGxvZ2dhdG8uIEZhIHVuIHNlbXBsaWNlIGNvbnRyb2xsbyBkaSBwcmVzZW56YSBzdWxsJ0lkZW50aXR5XHJcbiAgICovXHJcbiAgcHVibGljIGlzTG9nZ2VkSW4oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLklkZW50aXR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwcmVzc2lvbiDDqCBzY3JpdHRhIHRpcG8gLS0+IFI6Um9sZTEgJiYgUDpQZXJtaXNzaW9uMSB8fCAoUjpSb2xlMiAmJiBQOlBlcm1pc3Npb24xKVxyXG4gICAqIFF1aW5kaSBwaXV0dG9zdG8gY2hlIGltcGxlbWVudGFyc2kgdW4gcGFyc2VyIGRlbGxhIG1hZG9ubmEgaW4gc3RpbGUgQWxlc3NhbmRybyBwcmVuZG8gbGEgc3RyYWRhIHN0cm9uemEgZSB2ZWxvY2UgY29uIGwnZXZhbCA6UFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0FDRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5Jbml0aWFsaXplZClcclxuICAgICAgY29uc29sZS5lcnJvcihcIkFjY2VzcyBDb250cm9sIFN5c3RlbSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIENhbGwgdGhpcy5hY2Nlc3NDb250cm9sLmluaXRpYWxpemUoLi4uLCAuLi4pIGJlZm9yZSB1c2luZyB0aGUgc2VydmljZVwiKTtcclxuXHJcbiAgICBpZiAoIWV4cHJlc3Npb24pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyIGxlIGVzcHJlc3Npb25pIGRpIHZpc2liaWxpdMOgIFwiZGlyZXR0ZVwiIHN1bGxhIFggaWdub3JvIGxlIGNvbmRpemlvbmkgZGkgZGVmYXVsdCBwZXJjaMOpIHNvbm8gY29uZGl6aW9uaSBmaXNpY2hlIHBpdXR0b3N0byBjaGUgbG9naWNoZVxyXG4gICAgLy8gU2lnbmlmaWNhIGNoZSBzaWFtbyBvIGRlbnRybyBvIGZ1b3JpIGRhIHVuIGlmcmFtZSBlIHF1ZXN0byBvdnZpYW1lbnRlIHZhIGEgc29wcmFzc2VkZXJlIGV2ZW50dWFsaSBjb25kaXppb25pIGxvZ2ljaGUgZGVsIHRpcG8gXCJzb25vIEphY2UgQWRtaW5cIlxyXG4gICAgaWYodGhpcy5BQ0NfREVGX0NPTkQgJiYgdGhpcy5BQ0NfREVGX0NPTkRfT1AgJiYgIWFic29sdXRlICYmIGV4cHJlc3Npb24gIT0gJ1g6MCcgJiYgZXhwcmVzc2lvbiAhPSAnWDoxJylcclxuICAgICAgZXhwcmVzc2lvbiA9IGAoJHtleHByZXNzaW9ufSkgJHt0aGlzLkFDQ19ERUZfQ09ORF9PUH0gJHt0aGlzLkFDQ19ERUZfQ09ORH1gO1xyXG4gICAgICBcclxuICAgIC8vIEVzcHJlc3Npb25lIGdpw6AgdmFsdXRhdGEsIG5vbiBzZXJ2ZSByaXZhbHV0YXJsYVxyXG4gICAgaWYgKHRoaXMuY2FjaGVbZXhwcmVzc2lvbl0pXHJcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlW2V4cHJlc3Npb25dO1xyXG5cclxuICAgIHZhciBSb2xlc1Blcm1pc3Npb25zUmVnZXhwID0gLy46W158JigpXSsvZztcclxuXHJcbiAgICB2YXIgbWF0Y2hlcyA9IGV4cHJlc3Npb24ubWF0Y2goUm9sZXNQZXJtaXNzaW9uc1JlZ2V4cCk7XHJcbiAgICBcclxuICAgIGlmICghbWF0Y2hlcylcclxuICAgICAgdGhyb3cgXCJFc3ByZXNzaW9uZSBBY2Nlc3MgQ29udHJvbCBub24gdmFsaWRhOiBcIiArIGV4cHJlc3Npb24gKyBcIi4gQXNzaWN1cmFyc2kgY2hlIHNpYSBzY3JpdHRhIGluIG1vZG8gY29ycmV0dG9cIjtcclxuXHJcbiAgICBtYXRjaGVzLmZvckVhY2godCA9PiB7XHJcbiAgICAgIHZhciBzcGxpdHMgPSB0LnNwbGl0KCc6Jyk7XHJcbiAgICAgIGlmIChzcGxpdHNbMF0gPT0gXCJSXCIpXHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgXCJ0aGlzLmhhc1JvbGUoJ1wiICsgc3BsaXRzWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgIGVsc2UgaWYgKHNwbGl0c1swXSA9PSBcIlBcIilcclxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCBcInRoaXMuaGFzUGVybWlzc2lvbignXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UodC50cmltKCksIFwidGhpcy5oYXNDdXN0b20oJ1wiICsgc3BsaXRzWzFdLnRyaW0oKSArIFwiJywgJ1wiICsgc3BsaXRzWzBdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcmV0ID0gPGJvb2xlYW4+ZXZhbChleHByZXNzaW9uKTtcclxuICAgIC8vIENhY2hlIHZhbG9yZVxyXG4gICAgdGhpcy5jYWNoZVtleHByZXNzaW9uXSA9IHJldDtcclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVdGlsaXp6YXRvIGRhIGhhc0FDRXhwcmVzc2lvbiBkZW50cm8gZXZhbFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc1JvbGUocm9sZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuSWRlbnRpdHkpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRWxlbWVudG8gSWRlbnRpdHkgbm9uIHNwZWNpZmljYXRvIGluIEFjY2VzcyBDb250cm9sLiBHbGkgYWNjZXNzaSBzYXJhbm5vIHR1dHRpIGxpYmVyaSBkaSBkZWZhdWx0XCIpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuSWRlbnRpdHkuUm9sZXMgJiYgdGhpcy5JZGVudGl0eS5Sb2xlcy5sZW5ndGggPiAwICYmIHRoaXMuSWRlbnRpdHkuUm9sZXMuaW5kZXhPZihyb2xlKSAhPSAtMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFV0aWxpenphdG8gZGEgaGFzQUNFeHByZXNzaW9uIGRlbnRybyBldmFsXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5JZGVudGl0eS5QZXJtaXNzaW9ucyAmJiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5JZGVudGl0eS5QZXJtaXNzaW9ucy5pbmRleE9mKHBlcm1pc3Npb24pICE9IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6emF0byBkYSBoYXNBQ0V4cHJlc3Npb24gZGVudHJvIGV2YWxcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNDdXN0b20odmFsdWU6IHN0cmluZywgdGFnOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHZhciBpdGVtcyA9IHRoaXMudGFnZ2VkSXRlbXNDYWNoZS5maW5kKHQgPT4gdC5rZXkgPT0gdGFnKT8uaXRlbXM7XHJcbiAgICBpZiAoIWl0ZW1zKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiAhIWl0ZW1zLmZpbmQodCA9PiB0ID09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVudHJ5IHBvaW50IGNoZSBjb250cm9sbGEgdW4nZXNwcmVzc2lvbmUgaWRlbnRpZmljYW50ZSB1biBwZXJtZXNzbywgYWQgZXNlbXBpbyBcIlA6dmlzdWFsaXp6YXppb25lXCIgY29udHJvbGxhIGNoZSBsJ3V0ZW50ZSBjb2xsZWdhdG8gYWJiaWEgdW4gcGVybWVzc28gY2hlIHNpIGNoaWFtYSBcInZpc3VhbGl6emF6aW9uZVwiXHJcbiAgICovXHJcbiAgcHVibGljIGhhcyhleHByOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmhhc0FDRXhwcmVzc2lvbihleHByLCBhYnNvbHV0ZSk7XHJcbiAgfVxyXG59Il19
@@ -24,9 +24,9 @@ export class ContextAwareDirective {
24
24
  element.nativeElement.setAttribute("enabled", "true");
25
25
  }
26
26
  }
27
- ContextAwareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ContextAwareDirective, deps: [{ token: i0.ElementRef }, { token: i1.ComponentContext, optional: true }, { token: i2.AccessControlService }, { token: ACC_CUSTOMKEY, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
28
- ContextAwareDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ContextAwareDirective, decorators: [{
27
+ ContextAwareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextAwareDirective, deps: [{ token: i0.ElementRef }, { token: i1.ComponentContext, optional: true }, { token: i2.AccessControlService }, { token: ACC_CUSTOMKEY, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
28
+ ContextAwareDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextAwareDirective, decorators: [{
30
30
  type: Directive,
31
31
  args: [{
32
32
  selector: '[contextAware]',
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
39
39
  type: Inject,
40
40
  args: [ACC_CUSTOMKEY]
41
41
  }] }]; } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1hd2FyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvbGliL2NvbnRleHQtYXdhcmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsU0FBUyxFQUFjLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7OztBQUt4Qzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUU5Qjs7OztPQUlHO0lBQ0gsWUFBWSxPQUFtQixFQUFzQixPQUF5QixFQUFVLEVBQXdCLEVBQTZDLGFBQXFCO1FBQTdILFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFBNkMsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDOUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFFLENBQUM7UUFFckksSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7bUhBWlEscUJBQXFCLGdJQU93RyxhQUFhO3VHQVAxSSxxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUM3Qjs7MEJBUXFDLFFBQVE7OzBCQUF5RSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gXCIuL2FjY2Vzcy1jb250cm9sLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQUNDX0NVU1RPTUtFWSB9IGZyb20gXCIuL3Rva2Vuc1wiXHJcblxyXG4vLyBDbGFzc2lcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gXCIuL21vZGVscy9Db21wb25lbnRDb250ZXh0XCI7XHJcblxyXG4vKipcclxuICogRGlyZXR0aXZhIGNoZSBwZXJtZXR0ZSBkaSBjYXBpcmUgc2UgbCdlbGVtZW50byBIVE1MIHN1IGN1aSDDqCB1dGlsaXp6YXRhIGRldidlc3NlcmUgZGlzYWJpbGl0YXRvIG8gbm8uXHJcbiAqIFxyXG4gKiBOb24gaGEgZWZmZXR0byBzdWdsaSBlbGVtZW50aSBkaWNoaWFyYXRpIGluIGNvbXBvbmVudGkgY2hlIG5vbiBkaWNoaWFyYW5vIGFsY3VuIENvbXBvbmVudENvbnRleHRcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbY29udGV4dEF3YXJlXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0QXdhcmVEaXJlY3RpdmUge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIEBPcHRpb25hbCgpIHByaXZhdGUgY29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgcHJpdmF0ZSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0NVU1RPTUtFWSkgcHJpdmF0ZSBBQ0NfQ1VTVE9NS0VZOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxsb3cgPSAhdGhpcy5jb250ZXh0IHx8ICF0aGlzLmNvbnRleHQubmFtZSB8fCAhdGhpcy5BQ0NfQ1VTVE9NS0VZIHx8IHRoaXMuYWMuaGFzKHRoaXMuQUNDX0NVU1RPTUtFWSArIFwiOlwiICsgdGhpcy5jb250ZXh0Lm5hbWUsKTtcclxuXHJcbiAgICAgICAgaWYgKCFhbGxvdylcclxuICAgICAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcImVuYWJsZWRcIiwgXCJ0cnVlXCIpO1xyXG4gICAgfVxyXG59Il19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1hd2FyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvbGliL2NvbnRleHQtYXdhcmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsU0FBUyxFQUFjLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7OztBQUt4Qzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUU5Qjs7OztPQUlHO0lBQ0gsWUFBWSxPQUFtQixFQUFzQixPQUF5QixFQUFVLEVBQXdCLEVBQTZDLGFBQXFCO1FBQTdILFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFBNkMsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDOUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFFLENBQUM7UUFFckksSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7a0hBWlEscUJBQXFCLGdJQU93RyxhQUFhO3NHQVAxSSxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUM3Qjs7MEJBUXFDLFFBQVE7OzBCQUF5RSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gXCIuL2FjY2Vzcy1jb250cm9sLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQUNDX0NVU1RPTUtFWSB9IGZyb20gXCIuL3Rva2Vuc1wiXHJcblxyXG4vLyBDbGFzc2lcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gXCIuL21vZGVscy9Db21wb25lbnRDb250ZXh0XCI7XHJcblxyXG4vKipcclxuICogRGlyZXR0aXZhIGNoZSBwZXJtZXR0ZSBkaSBjYXBpcmUgc2UgbCdlbGVtZW50byBIVE1MIHN1IGN1aSDDqCB1dGlsaXp6YXRhIGRldidlc3NlcmUgZGlzYWJpbGl0YXRvIG8gbm8uXHJcbiAqIFxyXG4gKiBOb24gaGEgZWZmZXR0byBzdWdsaSBlbGVtZW50aSBkaWNoaWFyYXRpIGluIGNvbXBvbmVudGkgY2hlIG5vbiBkaWNoaWFyYW5vIGFsY3VuIENvbXBvbmVudENvbnRleHRcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbY29udGV4dEF3YXJlXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0QXdhcmVEaXJlY3RpdmUge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIEBPcHRpb25hbCgpIHByaXZhdGUgY29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgcHJpdmF0ZSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0NVU1RPTUtFWSkgcHJpdmF0ZSBBQ0NfQ1VTVE9NS0VZOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxsb3cgPSAhdGhpcy5jb250ZXh0IHx8ICF0aGlzLmNvbnRleHQubmFtZSB8fCAhdGhpcy5BQ0NfQ1VTVE9NS0VZIHx8IHRoaXMuYWMuaGFzKHRoaXMuQUNDX0NVU1RPTUtFWSArIFwiOlwiICsgdGhpcy5jb250ZXh0Lm5hbWUsKTtcclxuXHJcbiAgICAgICAgaWYgKCFhbGxvdylcclxuICAgICAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcImVuYWJsZWRcIiwgXCJ0cnVlXCIpO1xyXG4gICAgfVxyXG59Il19
@@ -5,9 +5,9 @@ import * as i0 from "@angular/core";
5
5
  */
6
6
  export class ComponentContext {
7
7
  }
8
- ComponentContext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9
- ComponentContext.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext });
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext, decorators: [{
8
+ ComponentContext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9
+ ComponentContext.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext, decorators: [{
11
11
  type: Injectable
12
12
  }] });
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50Q29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvbW9kZWxzL0NvbXBvbmVudENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7O0dBRUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCOzs4R0FBaEIsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBUb2tlbiBkYSBpbmlldHRhcmUgcGVyIG9nbmkgc2luZ29sbyBjb21wb25lbnRlIHBlciBjdWkgc2kgdnVvbGUgZGlzYXR0aXZhcmUvYXR0aXZhcmUgbWFzc2l2YW1lbnRlIGRlZ2xpIGlucHV0IGluIG1hbmllcmEgY29udGVzdHVhbGVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbnRleHR7XHJcbiAgICAvKipcclxuICAgICogTm9tZSBkZWwgQ29udGVzdG8gYXNzZWduYXRvIGFsIENvbXBvbmVudGVcclxuICAgICovXHJcbiAgICBuYW1lIDogc3RyaW5nO1xyXG59Il19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50Q29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvbW9kZWxzL0NvbXBvbmVudENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7O0dBRUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCO2lIQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBUb2tlbiBkYSBpbmlldHRhcmUgcGVyIG9nbmkgc2luZ29sbyBjb21wb25lbnRlIHBlciBjdWkgc2kgdnVvbGUgZGlzYXR0aXZhcmUvYXR0aXZhcmUgbWFzc2l2YW1lbnRlIGRlZ2xpIGlucHV0IGluIG1hbmllcmEgY29udGVzdHVhbGVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbnRleHR7XHJcbiAgICAvKipcclxuICAgICogTm9tZSBkZWwgQ29udGVzdG8gYXNzZWduYXRvIGFsIENvbXBvbmVudGVcclxuICAgICovXHJcbiAgICBuYW1lIDogc3RyaW5nO1xyXG59Il19
@@ -50,6 +50,12 @@ class AccessControlService {
50
50
  * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom
51
51
  */
52
52
  initializeCustomPermissions(customPermissions) {
53
+ for (let i = 0; i < customPermissions.length; i++) {
54
+ if (customPermissions[i].key.length > 1) {
55
+ console.error("[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.");
56
+ return;
57
+ }
58
+ }
53
59
  this.taggedItemsCache = customPermissions;
54
60
  this.InitializedCustom = true;
55
61
  }
@@ -65,7 +71,7 @@ class AccessControlService {
65
71
  *
66
72
  * @ignore
67
73
  */
68
- hasACExpression(expression) {
74
+ hasACExpression(expression, absolute = false) {
69
75
  if (!this.Initialized)
70
76
  console.error("Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service");
71
77
  if (!expression)
@@ -74,9 +80,11 @@ class AccessControlService {
74
80
  console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
75
81
  return true;
76
82
  }
77
- if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP)
83
+ // Per le espressioni di visibilità "dirette" sulla X ignoro le condizioni di default perché sono condizioni fisiche piuttosto che logiche
84
+ // Significa che siamo o dentro o fuori da un iframe e questo ovviamente va a soprassedere eventuali condizioni logiche del tipo "sono Jace Admin"
85
+ if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute && expression != 'X:0' && expression != 'X:1')
78
86
  expression = `(${expression}) ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND}`;
79
- //Espressione già valutata, non serve rivalutarla
87
+ // Espressione già valutata, non serve rivalutarla
80
88
  if (this.cache[expression])
81
89
  return this.cache[expression];
82
90
  var RolesPermissionsRegexp = /.:[^|&()]+/g;
@@ -98,7 +106,7 @@ class AccessControlService {
98
106
  return ret;
99
107
  }
100
108
  /**
101
- * Utilizzato da hasACExpression
109
+ * Utilizzato da hasACExpression dentro eval
102
110
  *
103
111
  * @ignore
104
112
  */
@@ -110,7 +118,7 @@ class AccessControlService {
110
118
  return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;
111
119
  }
112
120
  /**
113
- * Utilizzato da hasACExpression
121
+ * Utilizzato da hasACExpression dentro eval
114
122
  *
115
123
  * @ignore
116
124
  */
@@ -122,7 +130,7 @@ class AccessControlService {
122
130
  return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;
123
131
  }
124
132
  /**
125
- * Utilizzato da hasACExpression
133
+ * Utilizzato da hasACExpression dentro eval
126
134
  *
127
135
  * @ignore
128
136
  */
@@ -139,13 +147,13 @@ class AccessControlService {
139
147
  /**
140
148
  * Entry point che controlla un'espressione identificante un permesso, ad esempio "P:visualizzazione" controlla che l'utente collegato abbia un permesso che si chiama "visualizzazione"
141
149
  */
142
- has(expr) {
143
- return this.hasACExpression(expr);
150
+ has(expr, absolute = false) {
151
+ return this.hasACExpression(expr, absolute);
144
152
  }
145
153
  }
146
- AccessControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService, deps: [{ token: ACC_DEF_COND, optional: true }, { token: ACC_DEF_COND_OP, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
147
- AccessControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService });
148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService, decorators: [{
154
+ AccessControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService, deps: [{ token: ACC_DEF_COND, optional: true }, { token: ACC_DEF_COND_OP, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
155
+ AccessControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService });
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService, decorators: [{
149
157
  type: Injectable
150
158
  }], ctorParameters: function () {
151
159
  return [{ type: undefined, decorators: [{
@@ -263,9 +271,9 @@ class AccessControlRouteGuard {
263
271
  onRedirectInProgress() {
264
272
  }
265
273
  }
266
- AccessControlRouteGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard, deps: [{ token: i1.MessageService }, { token: AccessControlService }, { token: i3.Router }, { token: ACC_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
267
- AccessControlRouteGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard });
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard, decorators: [{
274
+ AccessControlRouteGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard, deps: [{ token: i1.MessageService }, { token: AccessControlService }, { token: i3.Router }, { token: ACC_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
275
+ AccessControlRouteGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard });
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard, decorators: [{
269
277
  type: Injectable
270
278
  }], ctorParameters: function () {
271
279
  return [{ type: i1.MessageService }, { type: AccessControlService }, { type: i3.Router }, { type: undefined, decorators: [{
@@ -292,16 +300,19 @@ class AccessControlDirective {
292
300
  this.templateRef = templateRef;
293
301
  this.viewContainer = viewContainer;
294
302
  this._ac = _ac;
303
+ /**
304
+ * Espressione da processare scritta come {Chiave}:{Valore}
305
+ *
306
+ * Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions.
307
+ *
308
+ * Nelle ultime versioni del template è anche presente di default la custom permission "X" che indica se l'applicaizone è Esterna o no
309
+ */
310
+ this.ac = null;
311
+ /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */
312
+ this.acAbsolute = false;
295
313
  }
296
- /**
297
- * Input autoreferenziale per la direttiva
298
- *
299
- * @param {string} expression espressione da processare scritta come {Chiave}:{Valore}
300
- *
301
- * Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions
302
- */
303
- set ac(expression) {
304
- var allow = this._ac.has(expression);
314
+ ngOnInit() {
315
+ var allow = this._ac.has(this.ac, this.acAbsolute);
305
316
  //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template
306
317
  if (allow)
307
318
  this.viewContainer.createEmbeddedView(this.templateRef);
@@ -309,15 +320,17 @@ class AccessControlDirective {
309
320
  this.viewContainer.clear();
310
321
  }
311
322
  }
312
- AccessControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: AccessControlService }], target: i0.ɵɵFactoryTarget.Directive });
313
- AccessControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: AccessControlDirective, selector: "[ac]", inputs: { ac: "ac" }, ngImport: i0 });
314
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlDirective, decorators: [{
323
+ AccessControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: AccessControlService }], target: i0.ɵɵFactoryTarget.Directive });
324
+ AccessControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: AccessControlDirective, selector: "[ac]", inputs: { ac: "ac", acAbsolute: "acAbsolute" }, ngImport: i0 });
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlDirective, decorators: [{
315
326
  type: Directive,
316
327
  args: [{
317
328
  selector: '[ac]',
318
329
  }]
319
330
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: AccessControlService }]; }, propDecorators: { ac: [{
320
331
  type: Input
332
+ }], acAbsolute: [{
333
+ type: Input
321
334
  }] } });
322
335
 
323
336
  /**
@@ -325,9 +338,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
325
338
  */
326
339
  class ComponentContext {
327
340
  }
328
- ComponentContext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
329
- ComponentContext.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext });
330
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext, decorators: [{
341
+ ComponentContext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
342
+ ComponentContext.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext });
343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext, decorators: [{
331
344
  type: Injectable
332
345
  }] });
333
346
 
@@ -352,9 +365,9 @@ class ContextAwareDirective {
352
365
  element.nativeElement.setAttribute("enabled", "true");
353
366
  }
354
367
  }
355
- ContextAwareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ContextAwareDirective, deps: [{ token: i0.ElementRef }, { token: ComponentContext, optional: true }, { token: AccessControlService }, { token: ACC_CUSTOMKEY, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
356
- ContextAwareDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 });
357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ContextAwareDirective, decorators: [{
368
+ ContextAwareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextAwareDirective, deps: [{ token: i0.ElementRef }, { token: ComponentContext, optional: true }, { token: AccessControlService }, { token: ACC_CUSTOMKEY, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
369
+ ContextAwareDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 });
370
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextAwareDirective, decorators: [{
358
371
  type: Directive,
359
372
  args: [{
360
373
  selector: '[contextAware]',
@@ -385,10 +398,10 @@ class AccessControlModule {
385
398
  };
386
399
  }
387
400
  }
388
- AccessControlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
389
- AccessControlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, declarations: [AccessControlDirective, ContextAwareDirective], imports: [LocalizationModule], exports: [AccessControlDirective, ContextAwareDirective] });
390
- AccessControlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, imports: [LocalizationModule] });
391
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, decorators: [{
401
+ AccessControlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
402
+ AccessControlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, declarations: [AccessControlDirective, ContextAwareDirective], imports: [LocalizationModule], exports: [AccessControlDirective, ContextAwareDirective] });
403
+ AccessControlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, imports: [LocalizationModule] });
404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, decorators: [{
392
405
  type: NgModule,
393
406
  args: [{
394
407
  imports: [LocalizationModule],
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-access-control.mjs","sources":["../../../projects/access-control/src/lib/tokens.ts","../../../projects/access-control/src/lib/access-control.service.ts","../../../projects/access-control/src/lib/AccessControlRouteGuard.ts","../../../projects/access-control/src/lib/access-control.directive.ts","../../../projects/access-control/src/lib/models/ComponentContext.ts","../../../projects/access-control/src/lib/context-aware.directive.ts","../../../projects/access-control/src/lib/access-control.module.ts","../../../projects/access-control/src/lib/models/AccessControlModuleConfig.ts","../../../projects/access-control/src/public-api.ts","../../../projects/access-control/src/esfaenza-access-control.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che racchiude il locale scelto per l'applicazione */\r\nexport const ACC_LOCALE: InjectionToken<string> = new InjectionToken<string>('ACC_LOCALE');\r\n\r\n/** Token che racchiude la chiave custom da controllare quando si effettuano controlli sul ComponentContext */\r\nexport const ACC_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACC_CUSTOMKEY');\r\n\r\n/** Token che indica la condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND');\r\n\r\n/** Token che indica l'operatore della condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND_OP: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND_OP');","// Angular\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { ACC_DEF_COND, ACC_DEF_COND_OP } from \"./tokens\";\r\n\r\n/**\r\n * Entrypoint di tutte le operazioni esposte dalla libreria access-control\r\n */\r\n@Injectable()\r\nexport class AccessControlService {\r\n\r\n /**\r\n * Indica se l'Identity è stata inizializzata\r\n */\r\n public Initialized: boolean = false;\r\n\r\n /**\r\n * Indica se sono state effettuate inizializzazioni di Custom Permissions\r\n */\r\n public InitializedCustom: boolean = false;\r\n\r\n /** @ignore */\r\n private cache: {} = {};\r\n\r\n /** @ignore */\r\n private taggedItemsCache: { key: string, items: string[] }[] = [];\r\n\r\n /**\r\n * Identity associata a quest'istanza del Servizio Access Control, utile se si vuole avere accesso a Ruoli e Permessi direttamente da qui, per qualsivoglia motivo\r\n */\r\n public Identity: { Roles: string[], Permissions: string[] };\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(ACC_DEF_COND) private ACC_DEF_COND: string, @Optional() @Inject(ACC_DEF_COND_OP) private ACC_DEF_COND_OP: string,) { }\r\n\r\n /**\r\n * Inizializza l'Identity del servizio con il modello specificato\r\n * \r\n * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi\r\n */\r\n public initializeIdentity(identity: { Roles: string[], Permissions: string[] }) {\r\n this.Identity = identity;\r\n this.Initialized = true;\r\n }\r\n\r\n /**\r\n * Inizializza i permessi Custom del servizio con il modello specificato\r\n * \r\n * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom\r\n */\r\n public initializeCustomPermissions(customPermissions: { key: string, items: string[] }[]) {\r\n this.taggedItemsCache = customPermissions;\r\n this.InitializedCustom = true;\r\n }\r\n\r\n /**\r\n * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity\r\n */\r\n public isLoggedIn() {\r\n return !!this.Identity;\r\n }\r\n\r\n /**\r\n * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)\r\n * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P\r\n * \r\n * @ignore\r\n */\r\n private hasACExpression(expression: string): boolean {\r\n if (!this.Initialized)\r\n console.error(\"Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service\");\r\n\r\n if (!expression)\r\n return true;\r\n\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n\r\n if(this.ACC_DEF_COND && this.ACC_DEF_COND_OP)\r\n expression = `(${expression}) ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND}`;\r\n \r\n //Espressione già valutata, non serve rivalutarla\r\n if (this.cache[expression])\r\n return this.cache[expression];\r\n\r\n var RolesPermissionsRegexp = /.:[^|&()]+/g;\r\n\r\n var matches = expression.match(RolesPermissionsRegexp);\r\n \r\n if (!matches)\r\n throw \"Espressione Access Control non valida: \" + expression + \". Assicurarsi che sia scritta in modo corretto\";\r\n\r\n matches.forEach(t => {\r\n var splits = t.split(':');\r\n if (splits[0] == \"R\")\r\n expression = expression.replace(t.trim(), \"this.hasRole('\" + splits[1].trim() + \"')\");\r\n else if (splits[0] == \"P\")\r\n expression = expression.replace(t.trim(), \"this.hasPermission('\" + splits[1].trim() + \"')\");\r\n else\r\n expression = expression.replace(t.trim(), \"this.hasCustom('\" + splits[1].trim() + \"', '\" + splits[0].trim() + \"')\");\r\n });\r\n\r\n var ret = <boolean>eval(expression);\r\n // Cache valore\r\n this.cache[expression] = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression\r\n * \r\n * @ignore\r\n */\r\n private hasRole(role: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression\r\n * \r\n * @ignore\r\n */\r\n private hasPermission(permission: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression\r\n * \r\n * @ignore\r\n */\r\n private hasCustom(value: string, tag: string): boolean {\r\n var items = this.taggedItemsCache.find(t => t.key == tag)?.items;\r\n if (!items)\r\n return true;\r\n else if (items.length == 0)\r\n return false;\r\n else\r\n return !!items.find(t => t == value);\r\n }\r\n\r\n /**\r\n * Entry point che controlla un'espressione identificante un permesso, ad esempio \"P:visualizzazione\" controlla che l'utente collegato abbia un permesso che si chiama \"visualizzazione\"\r\n */\r\n public has(expr: string) {\r\n return this.hasACExpression(expr);\r\n }\r\n}","//Angular\r\nimport { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot } from \"@angular/router\";\r\nimport { Injectable, Optional, Inject } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n//Libs\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n//Models\r\nimport { ACC_LOCALE } from \"./tokens\";\r\nimport { AccessControlService } from './access-control.service';\r\n\r\n/**\r\n * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe\r\n * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:\r\n * \r\n * ```typescript\r\n * @Injectable()\r\n * export class HasAuthGuardComponent extends BaseRouterGuard {\r\n * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {\r\n * super(ms, acc, router, ts);\r\n * this.Routes = [\r\n * { route: \"page_route\", permission: \"P:perm_one\" },\r\n * { route: \"*\", permission: \"R:role_one\" }\r\n * ]\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Injectable()\r\nexport class AccessControlRouteGuard implements CanActivateChild {\r\n /**\r\n * @ignore\r\n */\r\n private lc: LocalizationService;\r\n\r\n /**\r\n * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi\r\n * \r\n * @default\r\n */\r\n protected LoginRoute : string = \"login\";\r\n\r\n /**\r\n * Permette di specificare delle Route sempre consentite, anche a livello di \"Radice\". Ad esempio la Root \"test\" permetterà\r\n * l'accesso a tutte le route che anche solo iniziano per \"test\"\r\n */\r\n protected AlwaysAllowedRoots: string[] = [];\r\n \r\n /**\r\n * Lista di Route con la loro espressione di controllo per valutare i permessi\r\n */\r\n protected Routes: { route: any; permission: string; }[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgService : MessageService, private ac: AccessControlService, private router: Router, @Optional() @Inject(ACC_LOCALE) LOCALE: string) {\r\n this.lc = new LocalizationService(LOCALE ?? 'it-IT');\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n canActivateChild(route: ActivatedRouteSnapshot, _: RouterStateSnapshot): Promise<boolean> {\r\n var url = route.url.join('/');\r\n //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite\r\n if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))\r\n return Promise.resolve(false);\r\n \r\n var routeMatched: boolean = false;\r\n for (let i = 0; i < this.Routes.length; i++) {\r\n let r = this.Routes[i];\r\n //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare\r\n if (url.indexOf(r.route) != -1) {\r\n routeMatched = true;\r\n return this.handleMatch(url, r);\r\n }\r\n }\r\n //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella\r\n if (!routeMatched) {\r\n var wildcardRoute = this.Routes.find(r => r.route == \"*\");\r\n if (wildcardRoute)\r\n return this.handleMatch(url, wildcardRoute);\r\n else\r\n console.log(\"Navigaizone avvenuta su route sconosciuta: \" + url);\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private handleMatch(fromurl: string, r: any) {\r\n let identity = this.ac.Identity;\r\n\r\n if (this.ac.has(r.permission) ||\r\n (\r\n // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente\r\n // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci\r\n // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve\r\n this.ac.Initialized &&\r\n (!identity.Roles || identity.Roles.length == 0) &&\r\n (!identity.Permissions || identity.Permissions.length == 0)\r\n ))\r\n return Promise.resolve(true);\r\n else {\r\n //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione\r\n //Se ho aperto una nuova tab invece rispedisco al login\r\n if (window.history.length > 2 && this.ac.isLoggedIn()) {\r\n this.msgService.simpleError(this.lc.loc(\"You don't have the required permissions to view this page. The navigation has been blocked\"));\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n this.onRedirectInProgress();\r\n this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Callback che viene eseguito prima che la Guard reindirizzi al login\r\n */\r\n protected onRedirectInProgress() {\r\n }\r\n}","// Angular\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Direttiva che permette di gestire il controllo accessi su componenti HTML. \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Directive({\r\n selector: '[ac]',\r\n})\r\nexport class AccessControlDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private _ac: AccessControlService) { }\r\n\r\n /**\r\n * Input autoreferenziale per la direttiva\r\n * \r\n * @param {string} expression espressione da processare scritta come {Chiave}:{Valore}\r\n * \r\n * Le {Chiave} disponibili sono di default \"R\" per i ruoli e \"P\" per i permessi. È possibile espanderle con le Custom Permissions\r\n */\r\n @Input() set ac(expression: string) {\r\n var allow = this._ac.has(expression);\r\n\r\n //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template\r\n\r\n if (allow) this.viewContainer.createEmbeddedView(this.templateRef);\r\n else this.viewContainer.clear();\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale\r\n */\r\n@Injectable()\r\nexport class ComponentContext{\r\n /**\r\n * Nome del Contesto assegnato al Componente\r\n */\r\n name : string;\r\n}","// Angular\r\nimport { Directive, ElementRef, Optional, Inject } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\nimport { ACC_CUSTOMKEY } from \"./tokens\"\r\n\r\n// Classi\r\nimport { ComponentContext } from \"./models/ComponentContext\";\r\n\r\n/**\r\n * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.\r\n * \r\n * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext\r\n */\r\n@Directive({\r\n selector: '[contextAware]',\r\n})\r\nexport class ContextAwareDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(element: ElementRef, @Optional() private context: ComponentContext, private ac: AccessControlService, @Optional() @Inject(ACC_CUSTOMKEY) private ACC_CUSTOMKEY: string) {\r\n var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + \":\" + this.context.name,);\r\n\r\n if (!allow)\r\n element.nativeElement.setAttribute(\"enabled\", \"true\");\r\n }\r\n}","import { LocalizationModule } from '@esfaenza/localizations';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ACC_LOCALE, ACC_CUSTOMKEY, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';\r\n\r\nimport { AccessControlModuleConfig } from './models/AccessControlModuleConfig';\r\nimport { AccessControlService } from './access-control.service';\r\nimport { AccessControlRouteGuard } from './AccessControlRouteGuard';\r\nimport { AccessControlDirective } from './access-control.directive';\r\nimport { ContextAwareDirective } from './context-aware.directive';\r\n\r\n@NgModule({\r\n imports: [LocalizationModule],\r\n declarations: [AccessControlDirective, ContextAwareDirective],\r\n exports:[AccessControlDirective, ContextAwareDirective]\r\n})\r\nexport class AccessControlModule {\r\n static forRoot(config?: AccessControlModuleConfig): ModuleWithProviders<AccessControlModule> {\r\n return {\r\n ngModule: AccessControlModule,\r\n providers: [\r\n AccessControlService,\r\n AccessControlRouteGuard,\r\n { provide: ACC_LOCALE, useValue: config?.locale || 'it-IT' },\r\n { provide: ACC_CUSTOMKEY, useValue: config?.customKey || null },\r\n { provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },\r\n { provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' }\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'\r\n */\r\nexport class AccessControlModuleConfig {\r\n\r\n /**\r\n * locale dell'applicazione in forma standard, ad esempio \"it-IT\", \"en-US\", etc...\r\n * \r\n * Attualmente si supportano solo le lingue Italiano e Inglese\r\n */\r\n locale: string;\r\n\r\n /** Chiave custom su cui la **contextAwareDirective** si basa per controllare se l'elemento è abilitato o meno */\r\n customKey: string;\r\n\r\n /** Condizione di default da aggiungere a ogni condizione utente. Es: 'R:Jace Admin' */\r\n defaultCondition?: string;\r\n\r\n /** Relazione logica fra la condizione di default e la condizione utente. Es: '||'. Di default viene utilizzato l'OR logico */\r\n defaultConditionLogicalOperator?: string;\r\n}","/*\r\n * Public API Surface of access-control\r\n */\r\n\r\nexport * from './lib/access-control.module';\r\nexport * from './lib/access-control.service';\r\nexport * from './lib/access-control.directive'\r\nexport * from './lib/context-aware.directive';\r\nexport * from \"./lib/models/AccessControlModuleConfig\";\r\nexport * from \"./lib/AccessControlRouteGuard\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/models/ComponentContext\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-access-control.mjs","sources":["../../../projects/access-control/src/lib/tokens.ts","../../../projects/access-control/src/lib/access-control.service.ts","../../../projects/access-control/src/lib/AccessControlRouteGuard.ts","../../../projects/access-control/src/lib/access-control.directive.ts","../../../projects/access-control/src/lib/models/ComponentContext.ts","../../../projects/access-control/src/lib/context-aware.directive.ts","../../../projects/access-control/src/lib/access-control.module.ts","../../../projects/access-control/src/lib/models/AccessControlModuleConfig.ts","../../../projects/access-control/src/public-api.ts","../../../projects/access-control/src/esfaenza-access-control.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che racchiude il locale scelto per l'applicazione */\r\nexport const ACC_LOCALE: InjectionToken<string> = new InjectionToken<string>('ACC_LOCALE');\r\n\r\n/** Token che racchiude la chiave custom da controllare quando si effettuano controlli sul ComponentContext */\r\nexport const ACC_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACC_CUSTOMKEY');\r\n\r\n/** Token che indica la condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND');\r\n\r\n/** Token che indica l'operatore della condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND_OP: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND_OP');","// Angular\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { ACC_DEF_COND, ACC_DEF_COND_OP } from \"./tokens\";\r\n\r\n/**\r\n * Entrypoint di tutte le operazioni esposte dalla libreria access-control\r\n */\r\n@Injectable()\r\nexport class AccessControlService {\r\n\r\n /**\r\n * Indica se l'Identity è stata inizializzata\r\n */\r\n public Initialized: boolean = false;\r\n\r\n /**\r\n * Indica se sono state effettuate inizializzazioni di Custom Permissions\r\n */\r\n public InitializedCustom: boolean = false;\r\n\r\n /** @ignore */\r\n private cache: {} = {};\r\n\r\n /** @ignore */\r\n private taggedItemsCache: { key: string, items: string[] }[] = [];\r\n\r\n /**\r\n * Identity associata a quest'istanza del Servizio Access Control, utile se si vuole avere accesso a Ruoli e Permessi direttamente da qui, per qualsivoglia motivo\r\n */\r\n public Identity: { Roles: string[], Permissions: string[] };\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(ACC_DEF_COND) private ACC_DEF_COND: string, @Optional() @Inject(ACC_DEF_COND_OP) private ACC_DEF_COND_OP: string,) { }\r\n\r\n /**\r\n * Inizializza l'Identity del servizio con il modello specificato\r\n * \r\n * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi\r\n */\r\n public initializeIdentity(identity: { Roles: string[], Permissions: string[] }) {\r\n this.Identity = identity;\r\n this.Initialized = true;\r\n }\r\n\r\n /**\r\n * Inizializza i permessi Custom del servizio con il modello specificato\r\n * \r\n * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom\r\n */\r\n public initializeCustomPermissions(customPermissions: { key: string, items: string[] }[]) {\r\n for (let i = 0; i < customPermissions.length; i++) {\r\n if (customPermissions[i].key.length > 1) {\r\n console.error(\"[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.\");\r\n return;\r\n }\r\n }\r\n\r\n this.taggedItemsCache = customPermissions;\r\n this.InitializedCustom = true;\r\n }\r\n\r\n /**\r\n * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity\r\n */\r\n public isLoggedIn() {\r\n return !!this.Identity;\r\n }\r\n\r\n /**\r\n * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)\r\n * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P\r\n * \r\n * @ignore\r\n */\r\n private hasACExpression(expression: string, absolute: boolean = false): boolean {\r\n if (!this.Initialized)\r\n console.error(\"Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service\");\r\n\r\n if (!expression)\r\n return true;\r\n\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n\r\n // Per le espressioni di visibilità \"dirette\" sulla X ignoro le condizioni di default perché sono condizioni fisiche piuttosto che logiche\r\n // Significa che siamo o dentro o fuori da un iframe e questo ovviamente va a soprassedere eventuali condizioni logiche del tipo \"sono Jace Admin\"\r\n if(this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute && expression != 'X:0' && expression != 'X:1')\r\n expression = `(${expression}) ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND}`;\r\n \r\n // Espressione già valutata, non serve rivalutarla\r\n if (this.cache[expression])\r\n return this.cache[expression];\r\n\r\n var RolesPermissionsRegexp = /.:[^|&()]+/g;\r\n\r\n var matches = expression.match(RolesPermissionsRegexp);\r\n \r\n if (!matches)\r\n throw \"Espressione Access Control non valida: \" + expression + \". Assicurarsi che sia scritta in modo corretto\";\r\n\r\n matches.forEach(t => {\r\n var splits = t.split(':');\r\n if (splits[0] == \"R\")\r\n expression = expression.replace(t.trim(), \"this.hasRole('\" + splits[1].trim() + \"')\");\r\n else if (splits[0] == \"P\")\r\n expression = expression.replace(t.trim(), \"this.hasPermission('\" + splits[1].trim() + \"')\");\r\n else\r\n expression = expression.replace(t.trim(), \"this.hasCustom('\" + splits[1].trim() + \"', '\" + splits[0].trim() + \"')\");\r\n });\r\n\r\n var ret = <boolean>eval(expression);\r\n // Cache valore\r\n this.cache[expression] = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasRole(role: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasPermission(permission: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasCustom(value: string, tag: string): boolean {\r\n var items = this.taggedItemsCache.find(t => t.key == tag)?.items;\r\n if (!items)\r\n return true;\r\n else if (items.length == 0)\r\n return false;\r\n else\r\n return !!items.find(t => t == value);\r\n }\r\n\r\n /**\r\n * Entry point che controlla un'espressione identificante un permesso, ad esempio \"P:visualizzazione\" controlla che l'utente collegato abbia un permesso che si chiama \"visualizzazione\"\r\n */\r\n public has(expr: string, absolute: boolean = false) {\r\n return this.hasACExpression(expr, absolute);\r\n }\r\n}","//Angular\r\nimport { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot } from \"@angular/router\";\r\nimport { Injectable, Optional, Inject } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n//Libs\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n//Models\r\nimport { ACC_LOCALE } from \"./tokens\";\r\nimport { AccessControlService } from './access-control.service';\r\n\r\n/**\r\n * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe\r\n * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:\r\n * \r\n * ```typescript\r\n * @Injectable()\r\n * export class HasAuthGuardComponent extends BaseRouterGuard {\r\n * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {\r\n * super(ms, acc, router, ts);\r\n * this.Routes = [\r\n * { route: \"page_route\", permission: \"P:perm_one\" },\r\n * { route: \"*\", permission: \"R:role_one\" }\r\n * ]\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Injectable()\r\nexport class AccessControlRouteGuard implements CanActivateChild {\r\n /**\r\n * @ignore\r\n */\r\n private lc: LocalizationService;\r\n\r\n /**\r\n * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi\r\n * \r\n * @default\r\n */\r\n protected LoginRoute : string = \"login\";\r\n\r\n /**\r\n * Permette di specificare delle Route sempre consentite, anche a livello di \"Radice\". Ad esempio la Root \"test\" permetterà\r\n * l'accesso a tutte le route che anche solo iniziano per \"test\"\r\n */\r\n protected AlwaysAllowedRoots: string[] = [];\r\n \r\n /**\r\n * Lista di Route con la loro espressione di controllo per valutare i permessi\r\n */\r\n protected Routes: { route: any; permission: string; }[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgService : MessageService, private ac: AccessControlService, private router: Router, @Optional() @Inject(ACC_LOCALE) LOCALE: string) {\r\n this.lc = new LocalizationService(LOCALE ?? 'it-IT');\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n canActivateChild(route: ActivatedRouteSnapshot, _: RouterStateSnapshot): Promise<boolean> {\r\n var url = route.url.join('/');\r\n //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite\r\n if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))\r\n return Promise.resolve(false);\r\n \r\n var routeMatched: boolean = false;\r\n for (let i = 0; i < this.Routes.length; i++) {\r\n let r = this.Routes[i];\r\n //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare\r\n if (url.indexOf(r.route) != -1) {\r\n routeMatched = true;\r\n return this.handleMatch(url, r);\r\n }\r\n }\r\n //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella\r\n if (!routeMatched) {\r\n var wildcardRoute = this.Routes.find(r => r.route == \"*\");\r\n if (wildcardRoute)\r\n return this.handleMatch(url, wildcardRoute);\r\n else\r\n console.log(\"Navigaizone avvenuta su route sconosciuta: \" + url);\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private handleMatch(fromurl: string, r: any) {\r\n let identity = this.ac.Identity;\r\n\r\n if (this.ac.has(r.permission) ||\r\n (\r\n // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente\r\n // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci\r\n // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve\r\n this.ac.Initialized &&\r\n (!identity.Roles || identity.Roles.length == 0) &&\r\n (!identity.Permissions || identity.Permissions.length == 0)\r\n ))\r\n return Promise.resolve(true);\r\n else {\r\n //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione\r\n //Se ho aperto una nuova tab invece rispedisco al login\r\n if (window.history.length > 2 && this.ac.isLoggedIn()) {\r\n this.msgService.simpleError(this.lc.loc(\"You don't have the required permissions to view this page. The navigation has been blocked\"));\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n this.onRedirectInProgress();\r\n this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Callback che viene eseguito prima che la Guard reindirizzi al login\r\n */\r\n protected onRedirectInProgress() {\r\n }\r\n}","// Angular\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Direttiva che permette di gestire il controllo accessi su componenti HTML. \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Directive({\r\n selector: '[ac]',\r\n})\r\nexport class AccessControlDirective {\r\n \r\n /** \r\n * Espressione da processare scritta come {Chiave}:{Valore}\r\n * \r\n * Le {Chiave} disponibili sono di default \"R\" per i ruoli e \"P\" per i permessi. È possibile espanderle con le Custom Permissions.\r\n * \r\n * Nelle ultime versioni del template è anche presente di default la custom permission \"X\" che indica se l'applicaizone è Esterna o no\r\n */\r\n @Input() ac : string = null;\r\n\r\n /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */\r\n @Input() acAbsolute: boolean = false;\r\n\r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private _ac: AccessControlService) { }\r\n\r\n\r\n ngOnInit(){\r\n var allow = this._ac.has(this.ac, this.acAbsolute);\r\n\r\n //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template\r\n\r\n if (allow) this.viewContainer.createEmbeddedView(this.templateRef);\r\n else this.viewContainer.clear();\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale\r\n */\r\n@Injectable()\r\nexport class ComponentContext{\r\n /**\r\n * Nome del Contesto assegnato al Componente\r\n */\r\n name : string;\r\n}","// Angular\r\nimport { Directive, ElementRef, Optional, Inject } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\nimport { ACC_CUSTOMKEY } from \"./tokens\"\r\n\r\n// Classi\r\nimport { ComponentContext } from \"./models/ComponentContext\";\r\n\r\n/**\r\n * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.\r\n * \r\n * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext\r\n */\r\n@Directive({\r\n selector: '[contextAware]',\r\n})\r\nexport class ContextAwareDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(element: ElementRef, @Optional() private context: ComponentContext, private ac: AccessControlService, @Optional() @Inject(ACC_CUSTOMKEY) private ACC_CUSTOMKEY: string) {\r\n var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + \":\" + this.context.name,);\r\n\r\n if (!allow)\r\n element.nativeElement.setAttribute(\"enabled\", \"true\");\r\n }\r\n}","import { LocalizationModule } from '@esfaenza/localizations';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ACC_LOCALE, ACC_CUSTOMKEY, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';\r\n\r\nimport { AccessControlModuleConfig } from './models/AccessControlModuleConfig';\r\nimport { AccessControlService } from './access-control.service';\r\nimport { AccessControlRouteGuard } from './AccessControlRouteGuard';\r\nimport { AccessControlDirective } from './access-control.directive';\r\nimport { ContextAwareDirective } from './context-aware.directive';\r\n\r\n@NgModule({\r\n imports: [LocalizationModule],\r\n declarations: [AccessControlDirective, ContextAwareDirective],\r\n exports:[AccessControlDirective, ContextAwareDirective]\r\n})\r\nexport class AccessControlModule {\r\n static forRoot(config?: AccessControlModuleConfig): ModuleWithProviders<AccessControlModule> {\r\n return {\r\n ngModule: AccessControlModule,\r\n providers: [\r\n AccessControlService,\r\n AccessControlRouteGuard,\r\n { provide: ACC_LOCALE, useValue: config?.locale || 'it-IT' },\r\n { provide: ACC_CUSTOMKEY, useValue: config?.customKey || null },\r\n { provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },\r\n { provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' }\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'\r\n */\r\nexport class AccessControlModuleConfig {\r\n\r\n /**\r\n * locale dell'applicazione in forma standard, ad esempio \"it-IT\", \"en-US\", etc...\r\n * \r\n * Attualmente si supportano solo le lingue Italiano e Inglese\r\n */\r\n locale: string;\r\n\r\n /** Chiave custom su cui la **contextAwareDirective** si basa per controllare se l'elemento è abilitato o meno */\r\n customKey: string;\r\n\r\n /** Condizione di default da aggiungere a ogni condizione utente. Es: 'R:Jace Admin' */\r\n defaultCondition?: string;\r\n\r\n /** Relazione logica fra la condizione di default e la condizione utente. Es: '||'. Di default viene utilizzato l'OR logico */\r\n defaultConditionLogicalOperator?: string;\r\n}","/*\r\n * Public API Surface of access-control\r\n */\r\n\r\nexport * from './lib/access-control.module';\r\nexport * from './lib/access-control.service';\r\nexport * from './lib/access-control.directive'\r\nexport * from './lib/context-aware.directive';\r\nexport * from \"./lib/models/AccessControlModuleConfig\";\r\nexport * from \"./lib/AccessControlRouteGuard\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/models/ComponentContext\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService"],"mappings":"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"}
@@ -50,6 +50,12 @@ class AccessControlService {
50
50
  * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom
51
51
  */
52
52
  initializeCustomPermissions(customPermissions) {
53
+ for (let i = 0; i < customPermissions.length; i++) {
54
+ if (customPermissions[i].key.length > 1) {
55
+ console.error("[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.");
56
+ return;
57
+ }
58
+ }
53
59
  this.taggedItemsCache = customPermissions;
54
60
  this.InitializedCustom = true;
55
61
  }
@@ -65,7 +71,7 @@ class AccessControlService {
65
71
  *
66
72
  * @ignore
67
73
  */
68
- hasACExpression(expression) {
74
+ hasACExpression(expression, absolute = false) {
69
75
  if (!this.Initialized)
70
76
  console.error("Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service");
71
77
  if (!expression)
@@ -74,9 +80,11 @@ class AccessControlService {
74
80
  console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
75
81
  return true;
76
82
  }
77
- if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP)
83
+ // Per le espressioni di visibilità "dirette" sulla X ignoro le condizioni di default perché sono condizioni fisiche piuttosto che logiche
84
+ // Significa che siamo o dentro o fuori da un iframe e questo ovviamente va a soprassedere eventuali condizioni logiche del tipo "sono Jace Admin"
85
+ if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute && expression != 'X:0' && expression != 'X:1')
78
86
  expression = `(${expression}) ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND}`;
79
- //Espressione già valutata, non serve rivalutarla
87
+ // Espressione già valutata, non serve rivalutarla
80
88
  if (this.cache[expression])
81
89
  return this.cache[expression];
82
90
  var RolesPermissionsRegexp = /.:[^|&()]+/g;
@@ -98,7 +106,7 @@ class AccessControlService {
98
106
  return ret;
99
107
  }
100
108
  /**
101
- * Utilizzato da hasACExpression
109
+ * Utilizzato da hasACExpression dentro eval
102
110
  *
103
111
  * @ignore
104
112
  */
@@ -110,7 +118,7 @@ class AccessControlService {
110
118
  return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;
111
119
  }
112
120
  /**
113
- * Utilizzato da hasACExpression
121
+ * Utilizzato da hasACExpression dentro eval
114
122
  *
115
123
  * @ignore
116
124
  */
@@ -122,7 +130,7 @@ class AccessControlService {
122
130
  return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;
123
131
  }
124
132
  /**
125
- * Utilizzato da hasACExpression
133
+ * Utilizzato da hasACExpression dentro eval
126
134
  *
127
135
  * @ignore
128
136
  */
@@ -138,13 +146,13 @@ class AccessControlService {
138
146
  /**
139
147
  * Entry point che controlla un'espressione identificante un permesso, ad esempio "P:visualizzazione" controlla che l'utente collegato abbia un permesso che si chiama "visualizzazione"
140
148
  */
141
- has(expr) {
142
- return this.hasACExpression(expr);
149
+ has(expr, absolute = false) {
150
+ return this.hasACExpression(expr, absolute);
143
151
  }
144
152
  }
145
- AccessControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService, deps: [{ token: ACC_DEF_COND, optional: true }, { token: ACC_DEF_COND_OP, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
146
- AccessControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService });
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlService, decorators: [{
153
+ AccessControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService, deps: [{ token: ACC_DEF_COND, optional: true }, { token: ACC_DEF_COND_OP, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
154
+ AccessControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService });
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlService, decorators: [{
148
156
  type: Injectable
149
157
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
150
158
  type: Optional
@@ -260,9 +268,9 @@ class AccessControlRouteGuard {
260
268
  onRedirectInProgress() {
261
269
  }
262
270
  }
263
- AccessControlRouteGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard, deps: [{ token: i1.MessageService }, { token: AccessControlService }, { token: i3.Router }, { token: ACC_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
264
- AccessControlRouteGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard });
265
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlRouteGuard, decorators: [{
271
+ AccessControlRouteGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard, deps: [{ token: i1.MessageService }, { token: AccessControlService }, { token: i3.Router }, { token: ACC_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
272
+ AccessControlRouteGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard });
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlRouteGuard, decorators: [{
266
274
  type: Injectable
267
275
  }], ctorParameters: function () { return [{ type: i1.MessageService }, { type: AccessControlService }, { type: i3.Router }, { type: undefined, decorators: [{
268
276
  type: Optional
@@ -287,16 +295,19 @@ class AccessControlDirective {
287
295
  this.templateRef = templateRef;
288
296
  this.viewContainer = viewContainer;
289
297
  this._ac = _ac;
298
+ /**
299
+ * Espressione da processare scritta come {Chiave}:{Valore}
300
+ *
301
+ * Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions.
302
+ *
303
+ * Nelle ultime versioni del template è anche presente di default la custom permission "X" che indica se l'applicaizone è Esterna o no
304
+ */
305
+ this.ac = null;
306
+ /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */
307
+ this.acAbsolute = false;
290
308
  }
291
- /**
292
- * Input autoreferenziale per la direttiva
293
- *
294
- * @param {string} expression espressione da processare scritta come {Chiave}:{Valore}
295
- *
296
- * Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions
297
- */
298
- set ac(expression) {
299
- var allow = this._ac.has(expression);
309
+ ngOnInit() {
310
+ var allow = this._ac.has(this.ac, this.acAbsolute);
300
311
  //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template
301
312
  if (allow)
302
313
  this.viewContainer.createEmbeddedView(this.templateRef);
@@ -304,15 +315,17 @@ class AccessControlDirective {
304
315
  this.viewContainer.clear();
305
316
  }
306
317
  }
307
- AccessControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: AccessControlService }], target: i0.ɵɵFactoryTarget.Directive });
308
- AccessControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: AccessControlDirective, selector: "[ac]", inputs: { ac: "ac" }, ngImport: i0 });
309
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlDirective, decorators: [{
318
+ AccessControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: AccessControlService }], target: i0.ɵɵFactoryTarget.Directive });
319
+ AccessControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: AccessControlDirective, selector: "[ac]", inputs: { ac: "ac", acAbsolute: "acAbsolute" }, ngImport: i0 });
320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlDirective, decorators: [{
310
321
  type: Directive,
311
322
  args: [{
312
323
  selector: '[ac]',
313
324
  }]
314
325
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: AccessControlService }]; }, propDecorators: { ac: [{
315
326
  type: Input
327
+ }], acAbsolute: [{
328
+ type: Input
316
329
  }] } });
317
330
 
318
331
  /**
@@ -320,9 +333,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
320
333
  */
321
334
  class ComponentContext {
322
335
  }
323
- ComponentContext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
324
- ComponentContext.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext });
325
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ComponentContext, decorators: [{
336
+ ComponentContext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
337
+ ComponentContext.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext });
338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComponentContext, decorators: [{
326
339
  type: Injectable
327
340
  }] });
328
341
 
@@ -347,9 +360,9 @@ class ContextAwareDirective {
347
360
  element.nativeElement.setAttribute("enabled", "true");
348
361
  }
349
362
  }
350
- ContextAwareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ContextAwareDirective, deps: [{ token: i0.ElementRef }, { token: ComponentContext, optional: true }, { token: AccessControlService }, { token: ACC_CUSTOMKEY, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
351
- ContextAwareDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 });
352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ContextAwareDirective, decorators: [{
363
+ ContextAwareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextAwareDirective, deps: [{ token: i0.ElementRef }, { token: ComponentContext, optional: true }, { token: AccessControlService }, { token: ACC_CUSTOMKEY, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
364
+ ContextAwareDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 });
365
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextAwareDirective, decorators: [{
353
366
  type: Directive,
354
367
  args: [{
355
368
  selector: '[contextAware]',
@@ -378,10 +391,10 @@ class AccessControlModule {
378
391
  };
379
392
  }
380
393
  }
381
- AccessControlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
382
- AccessControlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, declarations: [AccessControlDirective, ContextAwareDirective], imports: [LocalizationModule], exports: [AccessControlDirective, ContextAwareDirective] });
383
- AccessControlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, imports: [LocalizationModule] });
384
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AccessControlModule, decorators: [{
394
+ AccessControlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
395
+ AccessControlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, declarations: [AccessControlDirective, ContextAwareDirective], imports: [LocalizationModule], exports: [AccessControlDirective, ContextAwareDirective] });
396
+ AccessControlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, imports: [LocalizationModule] });
397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccessControlModule, decorators: [{
385
398
  type: NgModule,
386
399
  args: [{
387
400
  imports: [LocalizationModule],
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-access-control.mjs","sources":["../../../projects/access-control/src/lib/tokens.ts","../../../projects/access-control/src/lib/access-control.service.ts","../../../projects/access-control/src/lib/AccessControlRouteGuard.ts","../../../projects/access-control/src/lib/access-control.directive.ts","../../../projects/access-control/src/lib/models/ComponentContext.ts","../../../projects/access-control/src/lib/context-aware.directive.ts","../../../projects/access-control/src/lib/access-control.module.ts","../../../projects/access-control/src/lib/models/AccessControlModuleConfig.ts","../../../projects/access-control/src/public-api.ts","../../../projects/access-control/src/esfaenza-access-control.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che racchiude il locale scelto per l'applicazione */\r\nexport const ACC_LOCALE: InjectionToken<string> = new InjectionToken<string>('ACC_LOCALE');\r\n\r\n/** Token che racchiude la chiave custom da controllare quando si effettuano controlli sul ComponentContext */\r\nexport const ACC_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACC_CUSTOMKEY');\r\n\r\n/** Token che indica la condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND');\r\n\r\n/** Token che indica l'operatore della condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND_OP: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND_OP');","// Angular\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { ACC_DEF_COND, ACC_DEF_COND_OP } from \"./tokens\";\r\n\r\n/**\r\n * Entrypoint di tutte le operazioni esposte dalla libreria access-control\r\n */\r\n@Injectable()\r\nexport class AccessControlService {\r\n\r\n /**\r\n * Indica se l'Identity è stata inizializzata\r\n */\r\n public Initialized: boolean = false;\r\n\r\n /**\r\n * Indica se sono state effettuate inizializzazioni di Custom Permissions\r\n */\r\n public InitializedCustom: boolean = false;\r\n\r\n /** @ignore */\r\n private cache: {} = {};\r\n\r\n /** @ignore */\r\n private taggedItemsCache: { key: string, items: string[] }[] = [];\r\n\r\n /**\r\n * Identity associata a quest'istanza del Servizio Access Control, utile se si vuole avere accesso a Ruoli e Permessi direttamente da qui, per qualsivoglia motivo\r\n */\r\n public Identity: { Roles: string[], Permissions: string[] };\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(ACC_DEF_COND) private ACC_DEF_COND: string, @Optional() @Inject(ACC_DEF_COND_OP) private ACC_DEF_COND_OP: string,) { }\r\n\r\n /**\r\n * Inizializza l'Identity del servizio con il modello specificato\r\n * \r\n * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi\r\n */\r\n public initializeIdentity(identity: { Roles: string[], Permissions: string[] }) {\r\n this.Identity = identity;\r\n this.Initialized = true;\r\n }\r\n\r\n /**\r\n * Inizializza i permessi Custom del servizio con il modello specificato\r\n * \r\n * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom\r\n */\r\n public initializeCustomPermissions(customPermissions: { key: string, items: string[] }[]) {\r\n this.taggedItemsCache = customPermissions;\r\n this.InitializedCustom = true;\r\n }\r\n\r\n /**\r\n * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity\r\n */\r\n public isLoggedIn() {\r\n return !!this.Identity;\r\n }\r\n\r\n /**\r\n * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)\r\n * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P\r\n * \r\n * @ignore\r\n */\r\n private hasACExpression(expression: string): boolean {\r\n if (!this.Initialized)\r\n console.error(\"Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service\");\r\n\r\n if (!expression)\r\n return true;\r\n\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n\r\n if(this.ACC_DEF_COND && this.ACC_DEF_COND_OP)\r\n expression = `(${expression}) ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND}`;\r\n \r\n //Espressione già valutata, non serve rivalutarla\r\n if (this.cache[expression])\r\n return this.cache[expression];\r\n\r\n var RolesPermissionsRegexp = /.:[^|&()]+/g;\r\n\r\n var matches = expression.match(RolesPermissionsRegexp);\r\n \r\n if (!matches)\r\n throw \"Espressione Access Control non valida: \" + expression + \". Assicurarsi che sia scritta in modo corretto\";\r\n\r\n matches.forEach(t => {\r\n var splits = t.split(':');\r\n if (splits[0] == \"R\")\r\n expression = expression.replace(t.trim(), \"this.hasRole('\" + splits[1].trim() + \"')\");\r\n else if (splits[0] == \"P\")\r\n expression = expression.replace(t.trim(), \"this.hasPermission('\" + splits[1].trim() + \"')\");\r\n else\r\n expression = expression.replace(t.trim(), \"this.hasCustom('\" + splits[1].trim() + \"', '\" + splits[0].trim() + \"')\");\r\n });\r\n\r\n var ret = <boolean>eval(expression);\r\n // Cache valore\r\n this.cache[expression] = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression\r\n * \r\n * @ignore\r\n */\r\n private hasRole(role: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression\r\n * \r\n * @ignore\r\n */\r\n private hasPermission(permission: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression\r\n * \r\n * @ignore\r\n */\r\n private hasCustom(value: string, tag: string): boolean {\r\n var items = this.taggedItemsCache.find(t => t.key == tag)?.items;\r\n if (!items)\r\n return true;\r\n else if (items.length == 0)\r\n return false;\r\n else\r\n return !!items.find(t => t == value);\r\n }\r\n\r\n /**\r\n * Entry point che controlla un'espressione identificante un permesso, ad esempio \"P:visualizzazione\" controlla che l'utente collegato abbia un permesso che si chiama \"visualizzazione\"\r\n */\r\n public has(expr: string) {\r\n return this.hasACExpression(expr);\r\n }\r\n}","//Angular\r\nimport { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot } from \"@angular/router\";\r\nimport { Injectable, Optional, Inject } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n//Libs\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n//Models\r\nimport { ACC_LOCALE } from \"./tokens\";\r\nimport { AccessControlService } from './access-control.service';\r\n\r\n/**\r\n * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe\r\n * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:\r\n * \r\n * ```typescript\r\n * @Injectable()\r\n * export class HasAuthGuardComponent extends BaseRouterGuard {\r\n * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {\r\n * super(ms, acc, router, ts);\r\n * this.Routes = [\r\n * { route: \"page_route\", permission: \"P:perm_one\" },\r\n * { route: \"*\", permission: \"R:role_one\" }\r\n * ]\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Injectable()\r\nexport class AccessControlRouteGuard implements CanActivateChild {\r\n /**\r\n * @ignore\r\n */\r\n private lc: LocalizationService;\r\n\r\n /**\r\n * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi\r\n * \r\n * @default\r\n */\r\n protected LoginRoute : string = \"login\";\r\n\r\n /**\r\n * Permette di specificare delle Route sempre consentite, anche a livello di \"Radice\". Ad esempio la Root \"test\" permetterà\r\n * l'accesso a tutte le route che anche solo iniziano per \"test\"\r\n */\r\n protected AlwaysAllowedRoots: string[] = [];\r\n \r\n /**\r\n * Lista di Route con la loro espressione di controllo per valutare i permessi\r\n */\r\n protected Routes: { route: any; permission: string; }[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgService : MessageService, private ac: AccessControlService, private router: Router, @Optional() @Inject(ACC_LOCALE) LOCALE: string) {\r\n this.lc = new LocalizationService(LOCALE ?? 'it-IT');\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n canActivateChild(route: ActivatedRouteSnapshot, _: RouterStateSnapshot): Promise<boolean> {\r\n var url = route.url.join('/');\r\n //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite\r\n if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))\r\n return Promise.resolve(false);\r\n \r\n var routeMatched: boolean = false;\r\n for (let i = 0; i < this.Routes.length; i++) {\r\n let r = this.Routes[i];\r\n //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare\r\n if (url.indexOf(r.route) != -1) {\r\n routeMatched = true;\r\n return this.handleMatch(url, r);\r\n }\r\n }\r\n //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella\r\n if (!routeMatched) {\r\n var wildcardRoute = this.Routes.find(r => r.route == \"*\");\r\n if (wildcardRoute)\r\n return this.handleMatch(url, wildcardRoute);\r\n else\r\n console.log(\"Navigaizone avvenuta su route sconosciuta: \" + url);\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private handleMatch(fromurl: string, r: any) {\r\n let identity = this.ac.Identity;\r\n\r\n if (this.ac.has(r.permission) ||\r\n (\r\n // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente\r\n // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci\r\n // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve\r\n this.ac.Initialized &&\r\n (!identity.Roles || identity.Roles.length == 0) &&\r\n (!identity.Permissions || identity.Permissions.length == 0)\r\n ))\r\n return Promise.resolve(true);\r\n else {\r\n //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione\r\n //Se ho aperto una nuova tab invece rispedisco al login\r\n if (window.history.length > 2 && this.ac.isLoggedIn()) {\r\n this.msgService.simpleError(this.lc.loc(\"You don't have the required permissions to view this page. The navigation has been blocked\"));\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n this.onRedirectInProgress();\r\n this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Callback che viene eseguito prima che la Guard reindirizzi al login\r\n */\r\n protected onRedirectInProgress() {\r\n }\r\n}","// Angular\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Direttiva che permette di gestire il controllo accessi su componenti HTML. \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Directive({\r\n selector: '[ac]',\r\n})\r\nexport class AccessControlDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private _ac: AccessControlService) { }\r\n\r\n /**\r\n * Input autoreferenziale per la direttiva\r\n * \r\n * @param {string} expression espressione da processare scritta come {Chiave}:{Valore}\r\n * \r\n * Le {Chiave} disponibili sono di default \"R\" per i ruoli e \"P\" per i permessi. È possibile espanderle con le Custom Permissions\r\n */\r\n @Input() set ac(expression: string) {\r\n var allow = this._ac.has(expression);\r\n\r\n //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template\r\n\r\n if (allow) this.viewContainer.createEmbeddedView(this.templateRef);\r\n else this.viewContainer.clear();\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale\r\n */\r\n@Injectable()\r\nexport class ComponentContext{\r\n /**\r\n * Nome del Contesto assegnato al Componente\r\n */\r\n name : string;\r\n}","// Angular\r\nimport { Directive, ElementRef, Optional, Inject } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\nimport { ACC_CUSTOMKEY } from \"./tokens\"\r\n\r\n// Classi\r\nimport { ComponentContext } from \"./models/ComponentContext\";\r\n\r\n/**\r\n * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.\r\n * \r\n * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext\r\n */\r\n@Directive({\r\n selector: '[contextAware]',\r\n})\r\nexport class ContextAwareDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(element: ElementRef, @Optional() private context: ComponentContext, private ac: AccessControlService, @Optional() @Inject(ACC_CUSTOMKEY) private ACC_CUSTOMKEY: string) {\r\n var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + \":\" + this.context.name,);\r\n\r\n if (!allow)\r\n element.nativeElement.setAttribute(\"enabled\", \"true\");\r\n }\r\n}","import { LocalizationModule } from '@esfaenza/localizations';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ACC_LOCALE, ACC_CUSTOMKEY, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';\r\n\r\nimport { AccessControlModuleConfig } from './models/AccessControlModuleConfig';\r\nimport { AccessControlService } from './access-control.service';\r\nimport { AccessControlRouteGuard } from './AccessControlRouteGuard';\r\nimport { AccessControlDirective } from './access-control.directive';\r\nimport { ContextAwareDirective } from './context-aware.directive';\r\n\r\n@NgModule({\r\n imports: [LocalizationModule],\r\n declarations: [AccessControlDirective, ContextAwareDirective],\r\n exports:[AccessControlDirective, ContextAwareDirective]\r\n})\r\nexport class AccessControlModule {\r\n static forRoot(config?: AccessControlModuleConfig): ModuleWithProviders<AccessControlModule> {\r\n return {\r\n ngModule: AccessControlModule,\r\n providers: [\r\n AccessControlService,\r\n AccessControlRouteGuard,\r\n { provide: ACC_LOCALE, useValue: config?.locale || 'it-IT' },\r\n { provide: ACC_CUSTOMKEY, useValue: config?.customKey || null },\r\n { provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },\r\n { provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' }\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'\r\n */\r\nexport class AccessControlModuleConfig {\r\n\r\n /**\r\n * locale dell'applicazione in forma standard, ad esempio \"it-IT\", \"en-US\", etc...\r\n * \r\n * Attualmente si supportano solo le lingue Italiano e Inglese\r\n */\r\n locale: string;\r\n\r\n /** Chiave custom su cui la **contextAwareDirective** si basa per controllare se l'elemento è abilitato o meno */\r\n customKey: string;\r\n\r\n /** Condizione di default da aggiungere a ogni condizione utente. Es: 'R:Jace Admin' */\r\n defaultCondition?: string;\r\n\r\n /** Relazione logica fra la condizione di default e la condizione utente. Es: '||'. Di default viene utilizzato l'OR logico */\r\n defaultConditionLogicalOperator?: string;\r\n}","/*\r\n * Public API Surface of access-control\r\n */\r\n\r\nexport * from './lib/access-control.module';\r\nexport * from './lib/access-control.service';\r\nexport * from './lib/access-control.directive'\r\nexport * from './lib/context-aware.directive';\r\nexport * from \"./lib/models/AccessControlModuleConfig\";\r\nexport * from \"./lib/AccessControlRouteGuard\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/models/ComponentContext\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-access-control.mjs","sources":["../../../projects/access-control/src/lib/tokens.ts","../../../projects/access-control/src/lib/access-control.service.ts","../../../projects/access-control/src/lib/AccessControlRouteGuard.ts","../../../projects/access-control/src/lib/access-control.directive.ts","../../../projects/access-control/src/lib/models/ComponentContext.ts","../../../projects/access-control/src/lib/context-aware.directive.ts","../../../projects/access-control/src/lib/access-control.module.ts","../../../projects/access-control/src/lib/models/AccessControlModuleConfig.ts","../../../projects/access-control/src/public-api.ts","../../../projects/access-control/src/esfaenza-access-control.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che racchiude il locale scelto per l'applicazione */\r\nexport const ACC_LOCALE: InjectionToken<string> = new InjectionToken<string>('ACC_LOCALE');\r\n\r\n/** Token che racchiude la chiave custom da controllare quando si effettuano controlli sul ComponentContext */\r\nexport const ACC_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACC_CUSTOMKEY');\r\n\r\n/** Token che indica la condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND');\r\n\r\n/** Token che indica l'operatore della condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND_OP: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND_OP');","// Angular\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { ACC_DEF_COND, ACC_DEF_COND_OP } from \"./tokens\";\r\n\r\n/**\r\n * Entrypoint di tutte le operazioni esposte dalla libreria access-control\r\n */\r\n@Injectable()\r\nexport class AccessControlService {\r\n\r\n /**\r\n * Indica se l'Identity è stata inizializzata\r\n */\r\n public Initialized: boolean = false;\r\n\r\n /**\r\n * Indica se sono state effettuate inizializzazioni di Custom Permissions\r\n */\r\n public InitializedCustom: boolean = false;\r\n\r\n /** @ignore */\r\n private cache: {} = {};\r\n\r\n /** @ignore */\r\n private taggedItemsCache: { key: string, items: string[] }[] = [];\r\n\r\n /**\r\n * Identity associata a quest'istanza del Servizio Access Control, utile se si vuole avere accesso a Ruoli e Permessi direttamente da qui, per qualsivoglia motivo\r\n */\r\n public Identity: { Roles: string[], Permissions: string[] };\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(ACC_DEF_COND) private ACC_DEF_COND: string, @Optional() @Inject(ACC_DEF_COND_OP) private ACC_DEF_COND_OP: string,) { }\r\n\r\n /**\r\n * Inizializza l'Identity del servizio con il modello specificato\r\n * \r\n * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi\r\n */\r\n public initializeIdentity(identity: { Roles: string[], Permissions: string[] }) {\r\n this.Identity = identity;\r\n this.Initialized = true;\r\n }\r\n\r\n /**\r\n * Inizializza i permessi Custom del servizio con il modello specificato\r\n * \r\n * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom\r\n */\r\n public initializeCustomPermissions(customPermissions: { key: string, items: string[] }[]) {\r\n for (let i = 0; i < customPermissions.length; i++) {\r\n if (customPermissions[i].key.length > 1) {\r\n console.error(\"[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.\");\r\n return;\r\n }\r\n }\r\n\r\n this.taggedItemsCache = customPermissions;\r\n this.InitializedCustom = true;\r\n }\r\n\r\n /**\r\n * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity\r\n */\r\n public isLoggedIn() {\r\n return !!this.Identity;\r\n }\r\n\r\n /**\r\n * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)\r\n * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P\r\n * \r\n * @ignore\r\n */\r\n private hasACExpression(expression: string, absolute: boolean = false): boolean {\r\n if (!this.Initialized)\r\n console.error(\"Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service\");\r\n\r\n if (!expression)\r\n return true;\r\n\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n\r\n // Per le espressioni di visibilità \"dirette\" sulla X ignoro le condizioni di default perché sono condizioni fisiche piuttosto che logiche\r\n // Significa che siamo o dentro o fuori da un iframe e questo ovviamente va a soprassedere eventuali condizioni logiche del tipo \"sono Jace Admin\"\r\n if(this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute && expression != 'X:0' && expression != 'X:1')\r\n expression = `(${expression}) ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND}`;\r\n \r\n // Espressione già valutata, non serve rivalutarla\r\n if (this.cache[expression])\r\n return this.cache[expression];\r\n\r\n var RolesPermissionsRegexp = /.:[^|&()]+/g;\r\n\r\n var matches = expression.match(RolesPermissionsRegexp);\r\n \r\n if (!matches)\r\n throw \"Espressione Access Control non valida: \" + expression + \". Assicurarsi che sia scritta in modo corretto\";\r\n\r\n matches.forEach(t => {\r\n var splits = t.split(':');\r\n if (splits[0] == \"R\")\r\n expression = expression.replace(t.trim(), \"this.hasRole('\" + splits[1].trim() + \"')\");\r\n else if (splits[0] == \"P\")\r\n expression = expression.replace(t.trim(), \"this.hasPermission('\" + splits[1].trim() + \"')\");\r\n else\r\n expression = expression.replace(t.trim(), \"this.hasCustom('\" + splits[1].trim() + \"', '\" + splits[0].trim() + \"')\");\r\n });\r\n\r\n var ret = <boolean>eval(expression);\r\n // Cache valore\r\n this.cache[expression] = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasRole(role: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasPermission(permission: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasCustom(value: string, tag: string): boolean {\r\n var items = this.taggedItemsCache.find(t => t.key == tag)?.items;\r\n if (!items)\r\n return true;\r\n else if (items.length == 0)\r\n return false;\r\n else\r\n return !!items.find(t => t == value);\r\n }\r\n\r\n /**\r\n * Entry point che controlla un'espressione identificante un permesso, ad esempio \"P:visualizzazione\" controlla che l'utente collegato abbia un permesso che si chiama \"visualizzazione\"\r\n */\r\n public has(expr: string, absolute: boolean = false) {\r\n return this.hasACExpression(expr, absolute);\r\n }\r\n}","//Angular\r\nimport { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot } from \"@angular/router\";\r\nimport { Injectable, Optional, Inject } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n//Libs\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n//Models\r\nimport { ACC_LOCALE } from \"./tokens\";\r\nimport { AccessControlService } from './access-control.service';\r\n\r\n/**\r\n * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe\r\n * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:\r\n * \r\n * ```typescript\r\n * @Injectable()\r\n * export class HasAuthGuardComponent extends BaseRouterGuard {\r\n * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {\r\n * super(ms, acc, router, ts);\r\n * this.Routes = [\r\n * { route: \"page_route\", permission: \"P:perm_one\" },\r\n * { route: \"*\", permission: \"R:role_one\" }\r\n * ]\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Injectable()\r\nexport class AccessControlRouteGuard implements CanActivateChild {\r\n /**\r\n * @ignore\r\n */\r\n private lc: LocalizationService;\r\n\r\n /**\r\n * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi\r\n * \r\n * @default\r\n */\r\n protected LoginRoute : string = \"login\";\r\n\r\n /**\r\n * Permette di specificare delle Route sempre consentite, anche a livello di \"Radice\". Ad esempio la Root \"test\" permetterà\r\n * l'accesso a tutte le route che anche solo iniziano per \"test\"\r\n */\r\n protected AlwaysAllowedRoots: string[] = [];\r\n \r\n /**\r\n * Lista di Route con la loro espressione di controllo per valutare i permessi\r\n */\r\n protected Routes: { route: any; permission: string; }[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgService : MessageService, private ac: AccessControlService, private router: Router, @Optional() @Inject(ACC_LOCALE) LOCALE: string) {\r\n this.lc = new LocalizationService(LOCALE ?? 'it-IT');\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n canActivateChild(route: ActivatedRouteSnapshot, _: RouterStateSnapshot): Promise<boolean> {\r\n var url = route.url.join('/');\r\n //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite\r\n if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))\r\n return Promise.resolve(false);\r\n \r\n var routeMatched: boolean = false;\r\n for (let i = 0; i < this.Routes.length; i++) {\r\n let r = this.Routes[i];\r\n //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare\r\n if (url.indexOf(r.route) != -1) {\r\n routeMatched = true;\r\n return this.handleMatch(url, r);\r\n }\r\n }\r\n //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella\r\n if (!routeMatched) {\r\n var wildcardRoute = this.Routes.find(r => r.route == \"*\");\r\n if (wildcardRoute)\r\n return this.handleMatch(url, wildcardRoute);\r\n else\r\n console.log(\"Navigaizone avvenuta su route sconosciuta: \" + url);\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private handleMatch(fromurl: string, r: any) {\r\n let identity = this.ac.Identity;\r\n\r\n if (this.ac.has(r.permission) ||\r\n (\r\n // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente\r\n // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci\r\n // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve\r\n this.ac.Initialized &&\r\n (!identity.Roles || identity.Roles.length == 0) &&\r\n (!identity.Permissions || identity.Permissions.length == 0)\r\n ))\r\n return Promise.resolve(true);\r\n else {\r\n //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione\r\n //Se ho aperto una nuova tab invece rispedisco al login\r\n if (window.history.length > 2 && this.ac.isLoggedIn()) {\r\n this.msgService.simpleError(this.lc.loc(\"You don't have the required permissions to view this page. The navigation has been blocked\"));\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n this.onRedirectInProgress();\r\n this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Callback che viene eseguito prima che la Guard reindirizzi al login\r\n */\r\n protected onRedirectInProgress() {\r\n }\r\n}","// Angular\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Direttiva che permette di gestire il controllo accessi su componenti HTML. \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Directive({\r\n selector: '[ac]',\r\n})\r\nexport class AccessControlDirective {\r\n \r\n /** \r\n * Espressione da processare scritta come {Chiave}:{Valore}\r\n * \r\n * Le {Chiave} disponibili sono di default \"R\" per i ruoli e \"P\" per i permessi. È possibile espanderle con le Custom Permissions.\r\n * \r\n * Nelle ultime versioni del template è anche presente di default la custom permission \"X\" che indica se l'applicaizone è Esterna o no\r\n */\r\n @Input() ac : string = null;\r\n\r\n /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */\r\n @Input() acAbsolute: boolean = false;\r\n\r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private _ac: AccessControlService) { }\r\n\r\n\r\n ngOnInit(){\r\n var allow = this._ac.has(this.ac, this.acAbsolute);\r\n\r\n //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template\r\n\r\n if (allow) this.viewContainer.createEmbeddedView(this.templateRef);\r\n else this.viewContainer.clear();\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale\r\n */\r\n@Injectable()\r\nexport class ComponentContext{\r\n /**\r\n * Nome del Contesto assegnato al Componente\r\n */\r\n name : string;\r\n}","// Angular\r\nimport { Directive, ElementRef, Optional, Inject } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\nimport { ACC_CUSTOMKEY } from \"./tokens\"\r\n\r\n// Classi\r\nimport { ComponentContext } from \"./models/ComponentContext\";\r\n\r\n/**\r\n * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.\r\n * \r\n * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext\r\n */\r\n@Directive({\r\n selector: '[contextAware]',\r\n})\r\nexport class ContextAwareDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(element: ElementRef, @Optional() private context: ComponentContext, private ac: AccessControlService, @Optional() @Inject(ACC_CUSTOMKEY) private ACC_CUSTOMKEY: string) {\r\n var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + \":\" + this.context.name,);\r\n\r\n if (!allow)\r\n element.nativeElement.setAttribute(\"enabled\", \"true\");\r\n }\r\n}","import { LocalizationModule } from '@esfaenza/localizations';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ACC_LOCALE, ACC_CUSTOMKEY, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';\r\n\r\nimport { AccessControlModuleConfig } from './models/AccessControlModuleConfig';\r\nimport { AccessControlService } from './access-control.service';\r\nimport { AccessControlRouteGuard } from './AccessControlRouteGuard';\r\nimport { AccessControlDirective } from './access-control.directive';\r\nimport { ContextAwareDirective } from './context-aware.directive';\r\n\r\n@NgModule({\r\n imports: [LocalizationModule],\r\n declarations: [AccessControlDirective, ContextAwareDirective],\r\n exports:[AccessControlDirective, ContextAwareDirective]\r\n})\r\nexport class AccessControlModule {\r\n static forRoot(config?: AccessControlModuleConfig): ModuleWithProviders<AccessControlModule> {\r\n return {\r\n ngModule: AccessControlModule,\r\n providers: [\r\n AccessControlService,\r\n AccessControlRouteGuard,\r\n { provide: ACC_LOCALE, useValue: config?.locale || 'it-IT' },\r\n { provide: ACC_CUSTOMKEY, useValue: config?.customKey || null },\r\n { provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },\r\n { provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' }\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'\r\n */\r\nexport class AccessControlModuleConfig {\r\n\r\n /**\r\n * locale dell'applicazione in forma standard, ad esempio \"it-IT\", \"en-US\", etc...\r\n * \r\n * Attualmente si supportano solo le lingue Italiano e Inglese\r\n */\r\n locale: string;\r\n\r\n /** Chiave custom su cui la **contextAwareDirective** si basa per controllare se l'elemento è abilitato o meno */\r\n customKey: string;\r\n\r\n /** Condizione di default da aggiungere a ogni condizione utente. Es: 'R:Jace Admin' */\r\n defaultCondition?: string;\r\n\r\n /** Relazione logica fra la condizione di default e la condizione utente. Es: '||'. Di default viene utilizzato l'OR logico */\r\n defaultConditionLogicalOperator?: string;\r\n}","/*\r\n * Public API Surface of access-control\r\n */\r\n\r\nexport * from './lib/access-control.module';\r\nexport * from './lib/access-control.service';\r\nexport * from './lib/access-control.directive'\r\nexport * from './lib/context-aware.directive';\r\nexport * from \"./lib/models/AccessControlModuleConfig\";\r\nexport * from \"./lib/AccessControlRouteGuard\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/models/ComponentContext\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService"],"mappings":"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"}
@@ -11,19 +11,22 @@ export declare class AccessControlDirective {
11
11
  private viewContainer;
12
12
  private _ac;
13
13
  /**
14
- * Costruttore
14
+ * Espressione da processare scritta come {Chiave}:{Valore}
15
15
  *
16
- * @ignore
16
+ * Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions.
17
+ *
18
+ * Nelle ultime versioni del template è anche presente di default la custom permission "X" che indica se l'applicaizone è Esterna o no
17
19
  */
18
- constructor(templateRef: TemplateRef<any>, viewContainer: ViewContainerRef, _ac: AccessControlService);
20
+ ac: string;
21
+ /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */
22
+ acAbsolute: boolean;
19
23
  /**
20
- * Input autoreferenziale per la direttiva
21
- *
22
- * @param {string} expression espressione da processare scritta come {Chiave}:{Valore}
24
+ * Costruttore
23
25
  *
24
- * Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions
26
+ * @ignore
25
27
  */
26
- set ac(expression: string);
28
+ constructor(templateRef: TemplateRef<any>, viewContainer: ViewContainerRef, _ac: AccessControlService);
29
+ ngOnInit(): void;
27
30
  static ɵfac: i0.ɵɵFactoryDeclaration<AccessControlDirective, never>;
28
- static ɵdir: i0.ɵɵDirectiveDeclaration<AccessControlDirective, "[ac]", never, { "ac": "ac"; }, {}, never, never, false>;
31
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AccessControlDirective, "[ac]", never, { "ac": "ac"; "acAbsolute": "acAbsolute"; }, {}, never, never, false>;
29
32
  }
@@ -56,19 +56,19 @@ export declare class AccessControlService {
56
56
  */
57
57
  private hasACExpression;
58
58
  /**
59
- * Utilizzato da hasACExpression
59
+ * Utilizzato da hasACExpression dentro eval
60
60
  *
61
61
  * @ignore
62
62
  */
63
63
  private hasRole;
64
64
  /**
65
- * Utilizzato da hasACExpression
65
+ * Utilizzato da hasACExpression dentro eval
66
66
  *
67
67
  * @ignore
68
68
  */
69
69
  private hasPermission;
70
70
  /**
71
- * Utilizzato da hasACExpression
71
+ * Utilizzato da hasACExpression dentro eval
72
72
  *
73
73
  * @ignore
74
74
  */
@@ -76,7 +76,7 @@ export declare class AccessControlService {
76
76
  /**
77
77
  * Entry point che controlla un'espressione identificante un permesso, ad esempio "P:visualizzazione" controlla che l'utente collegato abbia un permesso che si chiama "visualizzazione"
78
78
  */
79
- has(expr: string): boolean;
79
+ has(expr: string, absolute?: boolean): boolean;
80
80
  static ɵfac: i0.ɵɵFactoryDeclaration<AccessControlService, [{ optional: true; }, { optional: true; }]>;
81
81
  static ɵprov: i0.ɵɵInjectableDeclaration<AccessControlService>;
82
82
  }
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@esfaenza/access-control",
3
- "version": "14.2.0",
3
+ "version": "14.3.1",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },
7
7
  "peerDependencies": {
8
- "@angular/common": "~13.3.11",
9
- "@angular/core": "~13.3.11",
10
- "@esfaenza/localizations": "^13.3.3",
11
- "@esfaenza/extensions": "^13.3.5"
8
+ "@angular/common": "^14.3.0",
9
+ "@angular/core": "^14.3.0",
10
+ "@esfaenza/localizations": "^14.3.1",
11
+ "@esfaenza/extensions": "^14.3.1"
12
12
  },
13
13
  "module": "fesm2015/esfaenza-access-control.mjs",
14
14
  "es2020": "fesm2020/esfaenza-access-control.mjs",