@esfaenza/access-control 15.2.13 → 16.0.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.
Files changed (28) hide show
  1. package/{esm2020 → esm2022}/esfaenza-access-control.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/AccessControlRouteGuard.mjs +102 -102
  3. package/{esm2020 → esm2022}/lib/access-control.directive.mjs +52 -52
  4. package/{esm2020 → esm2022}/lib/access-control.module.mjs +30 -30
  5. package/{esm2020 → esm2022}/lib/access-control.pipe.mjs +31 -31
  6. package/{esm2020 → esm2022}/lib/access-control.service.mjs +197 -197
  7. package/{esm2020 → esm2022}/lib/context-aware.directive.mjs +42 -42
  8. package/{esm2020 → esm2022}/lib/models/AccessControlModuleConfig.mjs +5 -5
  9. package/{esm2020 → esm2022}/lib/models/ComponentContext.mjs +13 -13
  10. package/{esm2020 → esm2022}/lib/tokens.mjs +9 -9
  11. package/{esm2020 → esm2022}/public-api.mjs +12 -12
  12. package/{fesm2020 → fesm2022}/esfaenza-access-control.mjs +445 -445
  13. package/fesm2022/esfaenza-access-control.mjs.map +1 -0
  14. package/index.d.ts +5 -5
  15. package/lib/AccessControlRouteGuard.d.ts +60 -60
  16. package/lib/access-control.directive.d.ts +32 -32
  17. package/lib/access-control.module.d.ts +12 -12
  18. package/lib/access-control.pipe.d.ts +22 -22
  19. package/lib/access-control.service.d.ts +84 -84
  20. package/lib/context-aware.directive.d.ts +22 -22
  21. package/lib/models/AccessControlModuleConfig.d.ts +13 -13
  22. package/lib/models/ComponentContext.d.ts +12 -12
  23. package/lib/tokens.d.ts +9 -9
  24. package/package.json +8 -14
  25. package/public-api.d.ts +9 -9
  26. package/fesm2015/esfaenza-access-control.mjs +0 -478
  27. package/fesm2015/esfaenza-access-control.mjs.map +0 -1
  28. package/fesm2020/esfaenza-access-control.mjs.map +0 -1
@@ -1,197 +1,197 @@
1
- // Angular
2
- import { Inject, Injectable, Optional } from "@angular/core";
3
- import { ACC_DEF_COND, ACC_DEF_COND_OP } from "./tokens";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@esfaenza/extensions";
6
- /**
7
- * Entrypoint di tutte le operazioni esposte dalla libreria access-control
8
- */
9
- export class AccessControlService {
10
- /** @ignore */
11
- constructor(ACC_DEF_COND, ACC_DEF_COND_OP, emb) {
12
- this.ACC_DEF_COND = ACC_DEF_COND;
13
- this.ACC_DEF_COND_OP = ACC_DEF_COND_OP;
14
- this.emb = emb;
15
- /**
16
- * Indica se l'Identity è stata inizializzata
17
- */
18
- this.Initialized = false;
19
- /**
20
- * Indica se sono state effettuate inizializzazioni di Custom Permissions
21
- */
22
- this.InitializedCustom = false;
23
- /** @ignore */
24
- this.cache = {};
25
- /** @ignore */
26
- this.taggedItemsCache = [];
27
- }
28
- /**
29
- * Inizializza l'Identity del servizio con il modello specificato
30
- *
31
- * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi
32
- */
33
- initializeIdentity(identity) {
34
- this.Identity = identity;
35
- this.Initialized = true;
36
- }
37
- /**
38
- * Inizializza i permessi Custom del servizio con il modello specificato
39
- *
40
- * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom
41
- */
42
- initializeCustomPermissions(customPermissions) {
43
- for (let i = 0; i < customPermissions.length; i++) {
44
- if (customPermissions[i].key.length > 1) {
45
- console.error("[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.");
46
- return;
47
- }
48
- }
49
- // Custom permission sull'embedding aggiunta automaticamente se non presente
50
- if (!customPermissions.find(t => t.key === "X"))
51
- customPermissions.push({ key: "X", items: [this.emb.Embedded ? "1" : "0"] });
52
- this.taggedItemsCache = customPermissions;
53
- this.InitializedCustom = true;
54
- }
55
- /**
56
- * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity
57
- */
58
- isLoggedIn() {
59
- return !!this.Identity;
60
- }
61
- /**
62
- * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)
63
- * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P
64
- *
65
- * @ignore
66
- */
67
- hasACExpression(expression, absolute = false) {
68
- if (!this.Initialized)
69
- console.error("Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service");
70
- if (!expression)
71
- return true;
72
- if (!this.Identity) {
73
- console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
74
- return true;
75
- }
76
- // Espressione già valutata, non serve rivalutarla
77
- if (this.cache[expression])
78
- return this.cache[expression];
79
- var RolesPermissionsRegexp = /!?.:[^|&()]+/g;
80
- var matches = expression.match(RolesPermissionsRegexp);
81
- if (!matches)
82
- throw "Espressione Access Control non valida: " + expression + ". Assicurarsi che sia scritta in modo corretto";
83
- // Per condizioni dirette sull'embedding si considera sempre che siano operazioni assolute
84
- if (expression == 'X:0' || expression == 'X:1')
85
- absolute = true;
86
- matches.forEach(t => {
87
- var splits = t.split(':');
88
- // Per ruoli e permessi, se ho condizioni di default e l'espressione non è assoluta, wrappo ogni elemento con le espressioni di default
89
- // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo
90
- if (splits[0] == "R" || splits[0] == "!R") {
91
- if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
92
- let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
93
- var matches2 = tmpReplace.match(RolesPermissionsRegexp);
94
- matches2.forEach(t2 => {
95
- var splits2 = t2.split(':');
96
- if (splits2[0] == "R" || splits2[0] == "!R")
97
- tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
98
- else if (splits2[0] == "P" || splits2[0] == "!P")
99
- tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
100
- else
101
- tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
102
- });
103
- expression = expression.replace(t.trim(), tmpReplace);
104
- }
105
- else
106
- expression = expression.replace(t.trim(), (t.startsWith("!") ? '!' : '') + "this.hasRole('" + splits[1].trim() + "')");
107
- }
108
- else if (splits[0] == "P" || splits[0] == "!P") {
109
- if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
110
- let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
111
- var matches2 = tmpReplace.match(RolesPermissionsRegexp);
112
- matches2.forEach(t2 => {
113
- var splits2 = t2.split(':');
114
- if (splits2[0] == "R" || splits2[0] == "!R")
115
- tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
116
- else if (splits2[0] == "P" || splits2[0] == "!P")
117
- tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
118
- else
119
- tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
120
- });
121
- expression = expression.replace(t.trim(), tmpReplace);
122
- }
123
- else
124
- expression = expression.replace(t.trim(), (t.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits[1].trim() + "')");
125
- }
126
- else
127
- expression = expression.replace(t.trim(), (t.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits[1].trim() + "', '" + ((t.startsWith("!") ? splits[0].trim().charAt(1) : splits[0].trim())) + "')");
128
- });
129
- var ret = eval(expression);
130
- // Cache valore
131
- this.cache[expression] = ret;
132
- return ret;
133
- }
134
- /**
135
- * Utilizzato da hasACExpression dentro eval
136
- *
137
- * @ignore
138
- */
139
- hasRole(role) {
140
- if (!this.Identity) {
141
- console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
142
- return true;
143
- }
144
- return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;
145
- }
146
- /**
147
- * Utilizzato da hasACExpression dentro eval
148
- *
149
- * @ignore
150
- */
151
- hasPermission(permission) {
152
- if (!this.Identity) {
153
- console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
154
- return true;
155
- }
156
- return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;
157
- }
158
- /**
159
- * Utilizzato da hasACExpression dentro eval
160
- *
161
- * @ignore
162
- */
163
- hasCustom(value, tag) {
164
- var items = this.taggedItemsCache.find(t => t.key == tag)?.items;
165
- if (!items)
166
- return true;
167
- else if (items.length == 0)
168
- return false;
169
- else {
170
- var found = items.find(t => t == value);
171
- return found != null && found != undefined;
172
- }
173
- }
174
- /**
175
- * 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"
176
- */
177
- has(expr, absolute = false) {
178
- return this.hasACExpression(expr, absolute);
179
- }
180
- }
181
- AccessControlServicefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AccessControlService, deps: [{ token: ACC_DEF_COND, optional: true }, { token: ACC_DEF_COND_OP, optional: true }, { token: i1.AppEmbeddingExtensions }], target: i0.ɵɵFactoryTarget.Injectable });
182
- AccessControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AccessControlService, providedIn: "root" });
183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AccessControlService, decorators: [{
184
- type: Injectable,
185
- args: [{ providedIn: "root" }]
186
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
187
- type: Optional
188
- }, {
189
- type: Inject,
190
- args: [ACC_DEF_COND]
191
- }] }, { type: undefined, decorators: [{
192
- type: Optional
193
- }, {
194
- type: Inject,
195
- args: [ACC_DEF_COND_OP]
196
- }] }, { type: i1.AppEmbeddingExtensions }]; } });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFJekQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBdUIvQixjQUFjO0lBQ2QsWUFBc0QsWUFBb0IsRUFBK0MsZUFBdUIsRUFBVSxHQUEyQjtRQUEvSCxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUErQyxvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBdEJyTDs7V0FFRztRQUNJLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXBDOztXQUVHO1FBQ0ksc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRTFDLGNBQWM7UUFDTixVQUFLLEdBQU8sRUFBRSxDQUFDO1FBRXZCLGNBQWM7UUFDTixxQkFBZ0IsR0FBdUMsRUFBRSxDQUFDO0lBUXVILENBQUM7SUFFMUw7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLFFBQW9EO1FBQzVFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksMkJBQTJCLENBQUMsaUJBQXFEO1FBQ3RGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakQsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FB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Q0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsSSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFNBQVMsQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUMxQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDakUsSUFBSSxDQUFDLEtBQUs7WUFDUixPQUFPLElBQUksQ0FBQzthQUNULElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO2FBQ1Y7WUFDSCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFBO1lBQ3ZDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksR0FBRyxDQUFDLElBQVksRUFBRSxXQUFvQixLQUFLO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7aUhBck1VLG9CQUFvQixrQkF3QkMsWUFBWSw2QkFBb0QsZUFBZTtxSEF4QnBHLG9CQUFvQixjQURSLE1BQU07MkZBQ2xCLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQXlCakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxZQUFZOzswQkFBaUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQUNDX0RFRl9DT05ELCBBQ0NfREVGX0NPTkRfT1AgfSBmcm9tIFwiLi90b2tlbnNcIjtcclxuXHJcbmltcG9ydCB7IEFwcEVtYmVkZGluZ0V4dGVuc2lvbnMgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8qKlxyXG4gKiBFbnRyeXBvaW50IGRpIHR1dHRlIGxlIG9wZXJhemlvbmkgZXNwb3N0ZSBkYWxsYSBsaWJyZXJpYSBhY2Nlc3MtY29udHJvbFxyXG4gKi9cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46IFwicm9vdFwifSlcclxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIGwnSWRlbnRpdHkgw6ggc3RhdGEgaW5pemlhbGl6emF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2Ugc29ubyBzdGF0ZSBlZmZldHR1YXRlIGluaXppYWxpenphemlvbmkgZGkgQ3VzdG9tIFBlcm1pc3Npb25zXHJcbiAgICovXHJcbiAgcHVibGljIEluaXRpYWxpemVkQ3VzdG9tOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBjYWNoZToge30gPSB7fTtcclxuXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIHRhZ2dlZEl0ZW1zQ2FjaGU6IHsga2V5OiBzdHJpbmcsIGl0ZW1zOiBzdHJpbmdbXSB9W10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWRlbnRpdHkgYXNzb2NpYXRhIGEgcXVlc3QnaXN0YW56YSBkZWwgU2Vydml6aW8gQWNjZXNzIENvbnRyb2wsIHV0aWxlIHNlIHNpIHZ1b2xlIGF2ZXJlIGFjY2Vzc28gYSBSdW9saSBlIFBlcm1lc3NpIGRpcmV0dGFtZW50ZSBkYSBxdWksIHBlciBxdWFsc2l2b2dsaWEgbW90aXZvXHJcbiAgICovXHJcbiAgcHVibGljIElkZW50aXR5OiB7IFJvbGVzOiBzdHJpbmdbXSwgUGVybWlzc2lvbnM6IHN0cmluZ1tdIH07XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChBQ0NfREVGX0NPTkQpIHByaXZhdGUgQUNDX0RFRl9DT05EOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0RFRl9DT05EX09QKSBwcml2YXRlIEFDQ19ERUZfQ09ORF9PUDogc3RyaW5nLCBwcml2YXRlIGVtYjogQXBwRW1iZWRkaW5nRXh0ZW5zaW9ucykgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXppYWxpenphIGwnSWRlbnRpdHkgZGVsIHNlcnZpemlvIGNvbiBpbCBtb2RlbGxvIHNwZWNpZmljYXRvXHJcbiAgICogXHJcbiAgICogQHBhcmFtcyB7eyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9fSBpZGVudGl0eSBJZGVudGl0w6AgYXBwbGljYXRpdmEgY29uIHJ1b2xpIGUgcGVybWVzc2lcclxuICAgKi9cclxuICBwdWJsaWMgaW5pdGlhbGl6ZUlkZW50aXR5KGlkZW50aXR5OiB7IFJvbGVzOiBzdHJpbmdbXSwgUGVybWlzc2lvbnM6IHN0cmluZ1tdIH0pIHtcclxuICAgIHRoaXMuSWRlbnRpdHkgPSBpZGVudGl0eTtcclxuICAgIHRoaXMuSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pemlhbGl6emEgaSBwZXJtZXNzaSBDdXN0b20gZGVsIHNlcnZpemlvIGNvbiBpbCBtb2RlbGxvIHNwZWNpZmljYXRvXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHt7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdfSBjdXN0b21QZXJtaXNzaW9ucyBQZXJtZXNzaSBDdXN0b21cclxuICAgKi9cclxuICBwdWJsaWMgaW5pdGlhbGl6ZUN1c3RvbVBlcm1pc3Npb25zKGN1c3RvbVBlcm1pc3Npb25zOiB7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1c3RvbVBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChjdXN0b21QZXJtaXNzaW9uc1tpXS5rZXkubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXSBDdXN0b20gcGVybWlzc2lvbiBpbml0aWFsaXplZCB3aXRoIGtleXMgbG9uZ2VyIHRoYW4gYSBzaW5nbGUgY2hhcmFjdGVycy4gSWdub3JpbmcgRVZFUllUSElORy5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3VzdG9tIHBlcm1pc3Npb24gc3VsbCdlbWJlZGRpbmcgYWdnaXVudGEgYXV0b21hdGljYW1lbnRlIHNlIG5vbiBwcmVzZW50ZVxyXG4gICAgaWYoIWN1c3RvbVBlcm1pc3Npb25zLmZpbmQodCA9PiB0LmtleSA9PT0gXCJYXCIpKVxyXG4gICAgICBjdXN0b21QZXJtaXNzaW9ucy5wdXNoKHsga2V5OiBcIlhcIiwgaXRlbXM6IFt0aGlzLmVtYi5FbWJlZGRlZCA/IFwiMVwiIDogXCIwXCJdIH0pO1xyXG5cclxuICAgIHRoaXMudGFnZ2VkSXRlbXNDYWNoZSA9IGN1c3RvbVBlcm1pc3Npb25zO1xyXG4gICAgdGhpcy5Jbml0aWFsaXplZEN1c3RvbSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2UgbmVsbGEgc2Vzc2lvbmUgYXR0dWFsZSBlc2lzdGUgdW4gdXRlbnRlIGxvZ2dhdG8uIEZhIHVuIHNlbXBsaWNlIGNvbnRyb2xsbyBkaSBwcmVzZW56YSBzdWxsJ0lkZW50aXR5XHJcbiAgICovXHJcbiAgcHVibGljIGlzTG9nZ2VkSW4oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLklkZW50aXR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwcmVzc2lvbiDDqCBzY3JpdHRhIHRpcG8gLS0+IFI6Um9sZTEgJiYgUDpQZXJtaXNzaW9uMSB8fCAoUjpSb2xlMiAmJiBQOlBlcm1pc3Npb24xKVxyXG4gICAqIFF1aW5kaSBwaXV0dG9zdG8gY2hlIGltcGxlbWVudGFyc2kgdW4gcGFyc2VyIGRlbGxhIG1hZG9ubmEgaW4gc3RpbGUgQWxlc3NhbmRybyBwcmVuZG8gbGEgc3RyYWRhIHN0cm9uemEgZSB2ZWxvY2UgY29uIGwnZXZhbCA6UFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0FDRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5Jbml0aWFsaXplZClcclxuICAgICAgY29uc29sZS5lcnJvcihcIkFjY2VzcyBDb250cm9sIFN5c3RlbSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIENhbGwgdGhpcy5hY2Nlc3NDb250cm9sLmluaXRpYWxpemUoLi4uLCAuLi4pIGJlZm9yZSB1c2luZyB0aGUgc2VydmljZVwiKTtcclxuXHJcbiAgICBpZiAoIWV4cHJlc3Npb24pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXNwcmVzc2lvbmUgZ2nDoCB2YWx1dGF0YSwgbm9uIHNlcnZlIHJpdmFsdXRhcmxhXHJcbiAgICBpZiAodGhpcy5jYWNoZVtleHByZXNzaW9uXSlcclxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbZXhwcmVzc2lvbl07XHJcblxyXG4gICAgdmFyIFJvbGVzUGVybWlzc2lvbnNSZWdleHAgPSAvIT8uOltefCYoKV0rL2c7XHJcblxyXG4gICAgdmFyIG1hdGNoZXMgPSBleHByZXNzaW9uLm1hdGNoKFJvbGVzUGVybWlzc2lvbnNSZWdleHApO1xyXG5cclxuICAgIGlmICghbWF0Y2hlcylcclxuICAgICAgdGhyb3cgXCJFc3ByZXNzaW9uZSBBY2Nlc3MgQ29udHJvbCBub24gdmFsaWRhOiBcIiArIGV4cHJlc3Npb24gKyBcIi4gQXNzaWN1cmFyc2kgY2hlIHNpYSBzY3JpdHRhIGluIG1vZG8gY29ycmV0dG9cIjtcclxuXHJcbiAgICAvLyBQZXIgY29uZGl6aW9uaSBkaXJldHRlIHN1bGwnZW1iZWRkaW5nIHNpIGNvbnNpZGVyYSBzZW1wcmUgY2hlIHNpYW5vIG9wZXJhemlvbmkgYXNzb2x1dGVcclxuICAgIGlmIChleHByZXNzaW9uID09ICdYOjAnIHx8IGV4cHJlc3Npb24gPT0gJ1g6MScpXHJcbiAgICAgIGFic29sdXRlID0gdHJ1ZTtcclxuXHJcbiAgICBtYXRjaGVzLmZvckVhY2godCA9PiB7XHJcbiAgICAgIHZhciBzcGxpdHMgPSB0LnNwbGl0KCc6Jyk7XHJcbiAgICAgIC8vIFBlciBydW9saSBlIHBlcm1lc3NpLCBzZSBobyBjb25kaXppb25pIGRpIGRlZmF1bHQgZSBsJ2VzcHJlc3Npb25lIG5vbiDDqCBhc3NvbHV0YSwgd3JhcHBvIG9nbmkgZWxlbWVudG8gY29uIGxlIGVzcHJlc3Npb25pIGRpIGRlZmF1bHRcclxuICAgICAgLy8gUGVyIGxlIGN1c3RvbSBwZXJtaXNzaW9ucyBpbnZlY2UsIGRhdG8gY2hlIHNvbm8gY29zZSBzdGFjY2F0ZSBkYSBydW9saSBlIHBlcm1lc3NpLCBub24gaGEgbWFpIHNlbnNvIGZhcmxvXHJcbiAgICAgIGlmIChzcGxpdHNbMF0gPT0gXCJSXCIgfHwgc3BsaXRzWzBdID09IFwiIVJcIikge1xyXG4gICAgICAgIGlmICh0aGlzLkFDQ19ERUZfQ09ORCAmJiB0aGlzLkFDQ19ERUZfQ09ORF9PUCAmJiAhYWJzb2x1dGUpIHtcclxuICAgICAgICAgIGxldCB0bXBSZXBsYWNlID0gYCgke3R9ICR7dGhpcy5BQ0NfREVGX0NPTkRfT1B9ICR7dGhpcy5BQ0NfREVGX0NPTkR9KWBcclxuICAgICAgICAgIHZhciBtYXRjaGVzMiA9IHRtcFJlcGxhY2UubWF0Y2goUm9sZXNQZXJtaXNzaW9uc1JlZ2V4cCk7XHJcblxyXG4gICAgICAgICAgbWF0Y2hlczIuZm9yRWFjaCh0MiA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdHMyID0gdDIuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgaWYgKHNwbGl0czJbMF0gPT0gXCJSXCIgfHwgc3BsaXRzMlswXSA9PSBcIiFSXCIpIFxyXG4gICAgICAgICAgICAgIHRtcFJlcGxhY2UgPSB0bXBSZXBsYWNlLnJlcGxhY2UodDIudHJpbSgpLCAodDIuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHMyWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3BsaXRzMlswXSA9PSBcIlBcIiB8fCBzcGxpdHMyWzBdID09IFwiIVBcIilcclxuICAgICAgICAgICAgICB0bXBSZXBsYWNlID0gdG1wUmVwbGFjZS5yZXBsYWNlKHQyLnRyaW0oKSwgKHQyLnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc1Blcm1pc3Npb24oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG1wUmVwbGFjZSA9IHRtcFJlcGxhY2UucmVwbGFjZSh0Mi50cmltKCksICh0Mi5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNDdXN0b20oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCB0bXBSZXBsYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChzcGxpdHNbMF0gPT0gXCJQXCIgfHwgc3BsaXRzWzBdID09IFwiIVBcIikge1xyXG4gICAgICAgIGlmICh0aGlzLkFDQ19ERUZfQ09ORCAmJiB0aGlzLkFDQ19ERUZfQ09ORF9PUCAmJiAhYWJzb2x1dGUpIHtcclxuICAgICAgICAgIGxldCB0bXBSZXBsYWNlID0gYCgke3R9ICR7dGhpcy5BQ0NfREVGX0NPTkRfT1B9ICR7dGhpcy5BQ0NfREVGX0NPTkR9KWBcclxuICAgICAgICAgIHZhciBtYXRjaGVzMiA9IHRtcFJlcGxhY2UubWF0Y2goUm9sZXNQZXJtaXNzaW9uc1JlZ2V4cCk7XHJcblxyXG4gICAgICAgICAgbWF0Y2hlczIuZm9yRWFjaCh0MiA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdHMyID0gdDIuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgaWYgKHNwbGl0czJbMF0gPT0gXCJSXCIgfHwgc3BsaXRzMlswXSA9PSBcIiFSXCIpIFxyXG4gICAgICAgICAgICAgIHRtcFJlcGxhY2UgPSB0bXBSZXBsYWNlLnJlcGxhY2UodDIudHJpbSgpLCAodDIuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHMyWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3BsaXRzMlswXSA9PSBcIlBcIiB8fCBzcGxpdHMyWzBdID09IFwiIVBcIilcclxuICAgICAgICAgICAgICB0bXBSZXBsYWNlID0gdG1wUmVwbGFjZS5yZXBsYWNlKHQyLnRyaW0oKSwgKHQyLnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc1Blcm1pc3Npb24oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG1wUmVwbGFjZSA9IHRtcFJlcGxhY2UucmVwbGFjZSh0Mi50cmltKCksICh0Mi5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNDdXN0b20oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCB0bXBSZXBsYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUGVybWlzc2lvbignXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzQ3VzdG9tKCdcIiArIHNwbGl0c1sxXS50cmltKCkgKyBcIicsICdcIiArICgodC5zdGFydHNXaXRoKFwiIVwiKSA/IHNwbGl0c1swXS50cmltKCkuY2hhckF0KDEpIDogc3BsaXRzWzBdLnRyaW0oKSkpICsgXCInKVwiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciByZXQgPSA8Ym9vbGVhbj5ldmFsKGV4cHJlc3Npb24pO1xyXG4gICAgLy8gQ2FjaGUgdmFsb3JlXHJcbiAgICB0aGlzLmNhY2hlW2V4cHJlc3Npb25dID0gcmV0O1xyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFV0aWxpenphdG8gZGEgaGFzQUNFeHByZXNzaW9uIGRlbnRybyBldmFsXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5JZGVudGl0eS5Sb2xlcyAmJiB0aGlzLklkZW50aXR5LlJvbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5JZGVudGl0eS5Sb2xlcy5pbmRleE9mKHJvbGUpICE9IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6emF0byBkYSBoYXNBQ0V4cHJlc3Npb24gZGVudHJvIGV2YWxcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLklkZW50aXR5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkVsZW1lbnRvIElkZW50aXR5IG5vbiBzcGVjaWZpY2F0byBpbiBBY2Nlc3MgQ29udHJvbC4gR2xpIGFjY2Vzc2kgc2FyYW5ubyB0dXR0aSBsaWJlcmkgZGkgZGVmYXVsdFwiKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zICYmIHRoaXMuSWRlbnRpdHkuUGVybWlzc2lvbnMubGVuZ3RoID4gMCAmJiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zLmluZGV4T2YocGVybWlzc2lvbikgIT0gLTE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVdGlsaXp6YXRvIGRhIGhhc0FDRXhwcmVzc2lvbiBkZW50cm8gZXZhbFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0N1c3RvbSh2YWx1ZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGl0ZW1zID0gdGhpcy50YWdnZWRJdGVtc0NhY2hlLmZpbmQodCA9PiB0LmtleSA9PSB0YWcpPy5pdGVtcztcclxuICAgIGlmICghaXRlbXMpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgZm91bmQgPSBpdGVtcy5maW5kKHQgPT4gdCA9PSB2YWx1ZSlcclxuICAgICAgcmV0dXJuIGZvdW5kICE9IG51bGwgJiYgZm91bmQgIT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnkgcG9pbnQgY2hlIGNvbnRyb2xsYSB1bidlc3ByZXNzaW9uZSBpZGVudGlmaWNhbnRlIHVuIHBlcm1lc3NvLCBhZCBlc2VtcGlvIFwiUDp2aXN1YWxpenphemlvbmVcIiBjb250cm9sbGEgY2hlIGwndXRlbnRlIGNvbGxlZ2F0byBhYmJpYSB1biBwZXJtZXNzbyBjaGUgc2kgY2hpYW1hIFwidmlzdWFsaXp6YXppb25lXCJcclxuICAgKi9cclxuICBwdWJsaWMgaGFzKGV4cHI6IHN0cmluZywgYWJzb2x1dGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQUNFeHByZXNzaW9uKGV4cHIsIGFic29sdXRlKTtcclxuICB9XHJcbn0iXX0=
1
+ // Angular
2
+ import { Inject, Injectable, Optional } from "@angular/core";
3
+ import { ACC_DEF_COND, ACC_DEF_COND_OP } from "./tokens";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@esfaenza/extensions";
6
+ /**
7
+ * Entrypoint di tutte le operazioni esposte dalla libreria access-control
8
+ */
9
+ export class AccessControlService {
10
+ /** @ignore */
11
+ constructor(ACC_DEF_COND, ACC_DEF_COND_OP, emb) {
12
+ this.ACC_DEF_COND = ACC_DEF_COND;
13
+ this.ACC_DEF_COND_OP = ACC_DEF_COND_OP;
14
+ this.emb = emb;
15
+ /**
16
+ * Indica se l'Identity è stata inizializzata
17
+ */
18
+ this.Initialized = false;
19
+ /**
20
+ * Indica se sono state effettuate inizializzazioni di Custom Permissions
21
+ */
22
+ this.InitializedCustom = false;
23
+ /** @ignore */
24
+ this.cache = {};
25
+ /** @ignore */
26
+ this.taggedItemsCache = [];
27
+ }
28
+ /**
29
+ * Inizializza l'Identity del servizio con il modello specificato
30
+ *
31
+ * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi
32
+ */
33
+ initializeIdentity(identity) {
34
+ this.Identity = identity;
35
+ this.Initialized = true;
36
+ }
37
+ /**
38
+ * Inizializza i permessi Custom del servizio con il modello specificato
39
+ *
40
+ * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom
41
+ */
42
+ initializeCustomPermissions(customPermissions) {
43
+ for (let i = 0; i < customPermissions.length; i++) {
44
+ if (customPermissions[i].key.length > 1) {
45
+ console.error("[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.");
46
+ return;
47
+ }
48
+ }
49
+ // Custom permission sull'embedding aggiunta automaticamente se non presente
50
+ if (!customPermissions.find(t => t.key === "X"))
51
+ customPermissions.push({ key: "X", items: [this.emb.Embedded ? "1" : "0"] });
52
+ this.taggedItemsCache = customPermissions;
53
+ this.InitializedCustom = true;
54
+ }
55
+ /**
56
+ * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity
57
+ */
58
+ isLoggedIn() {
59
+ return !!this.Identity;
60
+ }
61
+ /**
62
+ * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)
63
+ * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P
64
+ *
65
+ * @ignore
66
+ */
67
+ hasACExpression(expression, absolute = false) {
68
+ if (!this.Initialized)
69
+ console.error("Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service");
70
+ if (!expression)
71
+ return true;
72
+ if (!this.Identity) {
73
+ console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
74
+ return true;
75
+ }
76
+ // Espressione già valutata, non serve rivalutarla
77
+ if (this.cache[expression])
78
+ return this.cache[expression];
79
+ var RolesPermissionsRegexp = /!?.:[^|&()]+/g;
80
+ var matches = expression.match(RolesPermissionsRegexp);
81
+ if (!matches)
82
+ throw "Espressione Access Control non valida: " + expression + ". Assicurarsi che sia scritta in modo corretto";
83
+ // Per condizioni dirette sull'embedding si considera sempre che siano operazioni assolute
84
+ if (expression == 'X:0' || expression == 'X:1')
85
+ absolute = true;
86
+ matches.forEach(t => {
87
+ var splits = t.split(':');
88
+ // Per ruoli e permessi, se ho condizioni di default e l'espressione non è assoluta, wrappo ogni elemento con le espressioni di default
89
+ // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo
90
+ if (splits[0] == "R" || splits[0] == "!R") {
91
+ if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
92
+ let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
93
+ var matches2 = tmpReplace.match(RolesPermissionsRegexp);
94
+ matches2.forEach(t2 => {
95
+ var splits2 = t2.split(':');
96
+ if (splits2[0] == "R" || splits2[0] == "!R")
97
+ tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
98
+ else if (splits2[0] == "P" || splits2[0] == "!P")
99
+ tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
100
+ else
101
+ tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
102
+ });
103
+ expression = expression.replace(t.trim(), tmpReplace);
104
+ }
105
+ else
106
+ expression = expression.replace(t.trim(), (t.startsWith("!") ? '!' : '') + "this.hasRole('" + splits[1].trim() + "')");
107
+ }
108
+ else if (splits[0] == "P" || splits[0] == "!P") {
109
+ if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
110
+ let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
111
+ var matches2 = tmpReplace.match(RolesPermissionsRegexp);
112
+ matches2.forEach(t2 => {
113
+ var splits2 = t2.split(':');
114
+ if (splits2[0] == "R" || splits2[0] == "!R")
115
+ tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
116
+ else if (splits2[0] == "P" || splits2[0] == "!P")
117
+ tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
118
+ else
119
+ tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
120
+ });
121
+ expression = expression.replace(t.trim(), tmpReplace);
122
+ }
123
+ else
124
+ expression = expression.replace(t.trim(), (t.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits[1].trim() + "')");
125
+ }
126
+ else
127
+ expression = expression.replace(t.trim(), (t.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits[1].trim() + "', '" + ((t.startsWith("!") ? splits[0].trim().charAt(1) : splits[0].trim())) + "')");
128
+ });
129
+ var ret = eval(expression);
130
+ // Cache valore
131
+ this.cache[expression] = ret;
132
+ return ret;
133
+ }
134
+ /**
135
+ * Utilizzato da hasACExpression dentro eval
136
+ *
137
+ * @ignore
138
+ */
139
+ hasRole(role) {
140
+ if (!this.Identity) {
141
+ console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
142
+ return true;
143
+ }
144
+ return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;
145
+ }
146
+ /**
147
+ * Utilizzato da hasACExpression dentro eval
148
+ *
149
+ * @ignore
150
+ */
151
+ hasPermission(permission) {
152
+ if (!this.Identity) {
153
+ console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
154
+ return true;
155
+ }
156
+ return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;
157
+ }
158
+ /**
159
+ * Utilizzato da hasACExpression dentro eval
160
+ *
161
+ * @ignore
162
+ */
163
+ hasCustom(value, tag) {
164
+ var items = this.taggedItemsCache.find(t => t.key == tag)?.items;
165
+ if (!items)
166
+ return true;
167
+ else if (items.length == 0)
168
+ return false;
169
+ else {
170
+ var found = items.find(t => t == value);
171
+ return found != null && found != undefined;
172
+ }
173
+ }
174
+ /**
175
+ * 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"
176
+ */
177
+ has(expr, absolute = false) {
178
+ return this.hasACExpression(expr, absolute);
179
+ }
180
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, deps: [{ token: ACC_DEF_COND, optional: true }, { token: ACC_DEF_COND_OP, optional: true }, { token: i1.AppEmbeddingExtensions }], target: i0.ɵɵFactoryTarget.Injectable }); }
181
+ static { thisprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, providedIn: "root" }); }
182
+ }
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, decorators: [{
184
+ type: Injectable,
185
+ args: [{ providedIn: "root" }]
186
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
187
+ type: Optional
188
+ }, {
189
+ type: Inject,
190
+ args: [ACC_DEF_COND]
191
+ }] }, { type: undefined, decorators: [{
192
+ type: Optional
193
+ }, {
194
+ type: Inject,
195
+ args: [ACC_DEF_COND_OP]
196
+ }] }, { type: i1.AppEmbeddingExtensions }]; } });
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFJekQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBdUIvQixjQUFjO0lBQ2QsWUFBc0QsWUFBb0IsRUFBK0MsZUFBdUIsRUFBVSxHQUEyQjtRQUEvSCxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUErQyxvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBdEJyTDs7V0FFRztRQUNJLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXBDOztXQUVHO1FBQ0ksc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRTFDLGNBQWM7UUFDTixVQUFLLEdBQU8sRUFBRSxDQUFDO1FBRXZCLGNBQWM7UUFDTixxQkFBZ0IsR0FBdUMsRUFBRSxDQUFDO0lBUXVILENBQUM7SUFFMUw7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLFFBQW9EO1FBQzVFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksMkJBQTJCLENBQUMsaUJBQXFEO1FBQ3RGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakQsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FB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Q0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsSSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFNBQVMsQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUMxQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDakUsSUFBSSxDQUFDLEtBQUs7WUFDUixPQUFPLElBQUksQ0FBQzthQUNULElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO2FBQ1Y7WUFDSCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFBO1lBQ3ZDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksR0FBRyxDQUFDLElBQVksRUFBRSxXQUFvQixLQUFLO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQzsrR0FyTVUsb0JBQW9CLGtCQXdCQyxZQUFZLDZCQUFvRCxlQUFlO21IQXhCcEcsb0JBQW9CLGNBRFIsTUFBTTs7NEZBQ2xCLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQXlCakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxZQUFZOzswQkFBaUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQUNDX0RFRl9DT05ELCBBQ0NfREVGX0NPTkRfT1AgfSBmcm9tIFwiLi90b2tlbnNcIjtcclxuXHJcbmltcG9ydCB7IEFwcEVtYmVkZGluZ0V4dGVuc2lvbnMgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8qKlxyXG4gKiBFbnRyeXBvaW50IGRpIHR1dHRlIGxlIG9wZXJhemlvbmkgZXNwb3N0ZSBkYWxsYSBsaWJyZXJpYSBhY2Nlc3MtY29udHJvbFxyXG4gKi9cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46IFwicm9vdFwifSlcclxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIGwnSWRlbnRpdHkgw6ggc3RhdGEgaW5pemlhbGl6emF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2Ugc29ubyBzdGF0ZSBlZmZldHR1YXRlIGluaXppYWxpenphemlvbmkgZGkgQ3VzdG9tIFBlcm1pc3Npb25zXHJcbiAgICovXHJcbiAgcHVibGljIEluaXRpYWxpemVkQ3VzdG9tOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBjYWNoZToge30gPSB7fTtcclxuXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIHRhZ2dlZEl0ZW1zQ2FjaGU6IHsga2V5OiBzdHJpbmcsIGl0ZW1zOiBzdHJpbmdbXSB9W10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWRlbnRpdHkgYXNzb2NpYXRhIGEgcXVlc3QnaXN0YW56YSBkZWwgU2Vydml6aW8gQWNjZXNzIENvbnRyb2wsIHV0aWxlIHNlIHNpIHZ1b2xlIGF2ZXJlIGFjY2Vzc28gYSBSdW9saSBlIFBlcm1lc3NpIGRpcmV0dGFtZW50ZSBkYSBxdWksIHBlciBxdWFsc2l2b2dsaWEgbW90aXZvXHJcbiAgICovXHJcbiAgcHVibGljIElkZW50aXR5OiB7IFJvbGVzOiBzdHJpbmdbXSwgUGVybWlzc2lvbnM6IHN0cmluZ1tdIH07XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChBQ0NfREVGX0NPTkQpIHByaXZhdGUgQUNDX0RFRl9DT05EOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0RFRl9DT05EX09QKSBwcml2YXRlIEFDQ19ERUZfQ09ORF9PUDogc3RyaW5nLCBwcml2YXRlIGVtYjogQXBwRW1iZWRkaW5nRXh0ZW5zaW9ucykgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXppYWxpenphIGwnSWRlbnRpdHkgZGVsIHNlcnZpemlvIGNvbiBpbCBtb2RlbGxvIHNwZWNpZmljYXRvXHJcbiAgICogXHJcbiAgICogQHBhcmFtcyB7eyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9fSBpZGVudGl0eSBJZGVudGl0w6AgYXBwbGljYXRpdmEgY29uIHJ1b2xpIGUgcGVybWVzc2lcclxuICAgKi9cclxuICBwdWJsaWMgaW5pdGlhbGl6ZUlkZW50aXR5KGlkZW50aXR5OiB7IFJvbGVzOiBzdHJpbmdbXSwgUGVybWlzc2lvbnM6IHN0cmluZ1tdIH0pIHtcclxuICAgIHRoaXMuSWRlbnRpdHkgPSBpZGVudGl0eTtcclxuICAgIHRoaXMuSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pemlhbGl6emEgaSBwZXJtZXNzaSBDdXN0b20gZGVsIHNlcnZpemlvIGNvbiBpbCBtb2RlbGxvIHNwZWNpZmljYXRvXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHt7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdfSBjdXN0b21QZXJtaXNzaW9ucyBQZXJtZXNzaSBDdXN0b21cclxuICAgKi9cclxuICBwdWJsaWMgaW5pdGlhbGl6ZUN1c3RvbVBlcm1pc3Npb25zKGN1c3RvbVBlcm1pc3Npb25zOiB7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1c3RvbVBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChjdXN0b21QZXJtaXNzaW9uc1tpXS5rZXkubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXSBDdXN0b20gcGVybWlzc2lvbiBpbml0aWFsaXplZCB3aXRoIGtleXMgbG9uZ2VyIHRoYW4gYSBzaW5nbGUgY2hhcmFjdGVycy4gSWdub3JpbmcgRVZFUllUSElORy5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3VzdG9tIHBlcm1pc3Npb24gc3VsbCdlbWJlZGRpbmcgYWdnaXVudGEgYXV0b21hdGljYW1lbnRlIHNlIG5vbiBwcmVzZW50ZVxyXG4gICAgaWYoIWN1c3RvbVBlcm1pc3Npb25zLmZpbmQodCA9PiB0LmtleSA9PT0gXCJYXCIpKVxyXG4gICAgICBjdXN0b21QZXJtaXNzaW9ucy5wdXNoKHsga2V5OiBcIlhcIiwgaXRlbXM6IFt0aGlzLmVtYi5FbWJlZGRlZCA/IFwiMVwiIDogXCIwXCJdIH0pO1xyXG5cclxuICAgIHRoaXMudGFnZ2VkSXRlbXNDYWNoZSA9IGN1c3RvbVBlcm1pc3Npb25zO1xyXG4gICAgdGhpcy5Jbml0aWFsaXplZEN1c3RvbSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2UgbmVsbGEgc2Vzc2lvbmUgYXR0dWFsZSBlc2lzdGUgdW4gdXRlbnRlIGxvZ2dhdG8uIEZhIHVuIHNlbXBsaWNlIGNvbnRyb2xsbyBkaSBwcmVzZW56YSBzdWxsJ0lkZW50aXR5XHJcbiAgICovXHJcbiAgcHVibGljIGlzTG9nZ2VkSW4oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLklkZW50aXR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwcmVzc2lvbiDDqCBzY3JpdHRhIHRpcG8gLS0+IFI6Um9sZTEgJiYgUDpQZXJtaXNzaW9uMSB8fCAoUjpSb2xlMiAmJiBQOlBlcm1pc3Npb24xKVxyXG4gICAqIFF1aW5kaSBwaXV0dG9zdG8gY2hlIGltcGxlbWVudGFyc2kgdW4gcGFyc2VyIGRlbGxhIG1hZG9ubmEgaW4gc3RpbGUgQWxlc3NhbmRybyBwcmVuZG8gbGEgc3RyYWRhIHN0cm9uemEgZSB2ZWxvY2UgY29uIGwnZXZhbCA6UFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0FDRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5Jbml0aWFsaXplZClcclxuICAgICAgY29uc29sZS5lcnJvcihcIkFjY2VzcyBDb250cm9sIFN5c3RlbSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIENhbGwgdGhpcy5hY2Nlc3NDb250cm9sLmluaXRpYWxpemUoLi4uLCAuLi4pIGJlZm9yZSB1c2luZyB0aGUgc2VydmljZVwiKTtcclxuXHJcbiAgICBpZiAoIWV4cHJlc3Npb24pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXNwcmVzc2lvbmUgZ2nDoCB2YWx1dGF0YSwgbm9uIHNlcnZlIHJpdmFsdXRhcmxhXHJcbiAgICBpZiAodGhpcy5jYWNoZVtleHByZXNzaW9uXSlcclxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbZXhwcmVzc2lvbl07XHJcblxyXG4gICAgdmFyIFJvbGVzUGVybWlzc2lvbnNSZWdleHAgPSAvIT8uOltefCYoKV0rL2c7XHJcblxyXG4gICAgdmFyIG1hdGNoZXMgPSBleHByZXNzaW9uLm1hdGNoKFJvbGVzUGVybWlzc2lvbnNSZWdleHApO1xyXG5cclxuICAgIGlmICghbWF0Y2hlcylcclxuICAgICAgdGhyb3cgXCJFc3ByZXNzaW9uZSBBY2Nlc3MgQ29udHJvbCBub24gdmFsaWRhOiBcIiArIGV4cHJlc3Npb24gKyBcIi4gQXNzaWN1cmFyc2kgY2hlIHNpYSBzY3JpdHRhIGluIG1vZG8gY29ycmV0dG9cIjtcclxuXHJcbiAgICAvLyBQZXIgY29uZGl6aW9uaSBkaXJldHRlIHN1bGwnZW1iZWRkaW5nIHNpIGNvbnNpZGVyYSBzZW1wcmUgY2hlIHNpYW5vIG9wZXJhemlvbmkgYXNzb2x1dGVcclxuICAgIGlmIChleHByZXNzaW9uID09ICdYOjAnIHx8IGV4cHJlc3Npb24gPT0gJ1g6MScpXHJcbiAgICAgIGFic29sdXRlID0gdHJ1ZTtcclxuXHJcbiAgICBtYXRjaGVzLmZvckVhY2godCA9PiB7XHJcbiAgICAgIHZhciBzcGxpdHMgPSB0LnNwbGl0KCc6Jyk7XHJcbiAgICAgIC8vIFBlciBydW9saSBlIHBlcm1lc3NpLCBzZSBobyBjb25kaXppb25pIGRpIGRlZmF1bHQgZSBsJ2VzcHJlc3Npb25lIG5vbiDDqCBhc3NvbHV0YSwgd3JhcHBvIG9nbmkgZWxlbWVudG8gY29uIGxlIGVzcHJlc3Npb25pIGRpIGRlZmF1bHRcclxuICAgICAgLy8gUGVyIGxlIGN1c3RvbSBwZXJtaXNzaW9ucyBpbnZlY2UsIGRhdG8gY2hlIHNvbm8gY29zZSBzdGFjY2F0ZSBkYSBydW9saSBlIHBlcm1lc3NpLCBub24gaGEgbWFpIHNlbnNvIGZhcmxvXHJcbiAgICAgIGlmIChzcGxpdHNbMF0gPT0gXCJSXCIgfHwgc3BsaXRzWzBdID09IFwiIVJcIikge1xyXG4gICAgICAgIGlmICh0aGlzLkFDQ19ERUZfQ09ORCAmJiB0aGlzLkFDQ19ERUZfQ09ORF9PUCAmJiAhYWJzb2x1dGUpIHtcclxuICAgICAgICAgIGxldCB0bXBSZXBsYWNlID0gYCgke3R9ICR7dGhpcy5BQ0NfREVGX0NPTkRfT1B9ICR7dGhpcy5BQ0NfREVGX0NPTkR9KWBcclxuICAgICAgICAgIHZhciBtYXRjaGVzMiA9IHRtcFJlcGxhY2UubWF0Y2goUm9sZXNQZXJtaXNzaW9uc1JlZ2V4cCk7XHJcblxyXG4gICAgICAgICAgbWF0Y2hlczIuZm9yRWFjaCh0MiA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdHMyID0gdDIuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgaWYgKHNwbGl0czJbMF0gPT0gXCJSXCIgfHwgc3BsaXRzMlswXSA9PSBcIiFSXCIpIFxyXG4gICAgICAgICAgICAgIHRtcFJlcGxhY2UgPSB0bXBSZXBsYWNlLnJlcGxhY2UodDIudHJpbSgpLCAodDIuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHMyWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3BsaXRzMlswXSA9PSBcIlBcIiB8fCBzcGxpdHMyWzBdID09IFwiIVBcIilcclxuICAgICAgICAgICAgICB0bXBSZXBsYWNlID0gdG1wUmVwbGFjZS5yZXBsYWNlKHQyLnRyaW0oKSwgKHQyLnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc1Blcm1pc3Npb24oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG1wUmVwbGFjZSA9IHRtcFJlcGxhY2UucmVwbGFjZSh0Mi50cmltKCksICh0Mi5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNDdXN0b20oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCB0bXBSZXBsYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChzcGxpdHNbMF0gPT0gXCJQXCIgfHwgc3BsaXRzWzBdID09IFwiIVBcIikge1xyXG4gICAgICAgIGlmICh0aGlzLkFDQ19ERUZfQ09ORCAmJiB0aGlzLkFDQ19ERUZfQ09ORF9PUCAmJiAhYWJzb2x1dGUpIHtcclxuICAgICAgICAgIGxldCB0bXBSZXBsYWNlID0gYCgke3R9ICR7dGhpcy5BQ0NfREVGX0NPTkRfT1B9ICR7dGhpcy5BQ0NfREVGX0NPTkR9KWBcclxuICAgICAgICAgIHZhciBtYXRjaGVzMiA9IHRtcFJlcGxhY2UubWF0Y2goUm9sZXNQZXJtaXNzaW9uc1JlZ2V4cCk7XHJcblxyXG4gICAgICAgICAgbWF0Y2hlczIuZm9yRWFjaCh0MiA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdHMyID0gdDIuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgaWYgKHNwbGl0czJbMF0gPT0gXCJSXCIgfHwgc3BsaXRzMlswXSA9PSBcIiFSXCIpIFxyXG4gICAgICAgICAgICAgIHRtcFJlcGxhY2UgPSB0bXBSZXBsYWNlLnJlcGxhY2UodDIudHJpbSgpLCAodDIuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHMyWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3BsaXRzMlswXSA9PSBcIlBcIiB8fCBzcGxpdHMyWzBdID09IFwiIVBcIilcclxuICAgICAgICAgICAgICB0bXBSZXBsYWNlID0gdG1wUmVwbGFjZS5yZXBsYWNlKHQyLnRyaW0oKSwgKHQyLnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc1Blcm1pc3Npb24oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG1wUmVwbGFjZSA9IHRtcFJlcGxhY2UucmVwbGFjZSh0Mi50cmltKCksICh0Mi5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNDdXN0b20oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCB0bXBSZXBsYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUGVybWlzc2lvbignXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzQ3VzdG9tKCdcIiArIHNwbGl0c1sxXS50cmltKCkgKyBcIicsICdcIiArICgodC5zdGFydHNXaXRoKFwiIVwiKSA/IHNwbGl0c1swXS50cmltKCkuY2hhckF0KDEpIDogc3BsaXRzWzBdLnRyaW0oKSkpICsgXCInKVwiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciByZXQgPSA8Ym9vbGVhbj5ldmFsKGV4cHJlc3Npb24pO1xyXG4gICAgLy8gQ2FjaGUgdmFsb3JlXHJcbiAgICB0aGlzLmNhY2hlW2V4cHJlc3Npb25dID0gcmV0O1xyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFV0aWxpenphdG8gZGEgaGFzQUNFeHByZXNzaW9uIGRlbnRybyBldmFsXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5JZGVudGl0eS5Sb2xlcyAmJiB0aGlzLklkZW50aXR5LlJvbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5JZGVudGl0eS5Sb2xlcy5pbmRleE9mKHJvbGUpICE9IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6emF0byBkYSBoYXNBQ0V4cHJlc3Npb24gZGVudHJvIGV2YWxcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLklkZW50aXR5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkVsZW1lbnRvIElkZW50aXR5IG5vbiBzcGVjaWZpY2F0byBpbiBBY2Nlc3MgQ29udHJvbC4gR2xpIGFjY2Vzc2kgc2FyYW5ubyB0dXR0aSBsaWJlcmkgZGkgZGVmYXVsdFwiKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zICYmIHRoaXMuSWRlbnRpdHkuUGVybWlzc2lvbnMubGVuZ3RoID4gMCAmJiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zLmluZGV4T2YocGVybWlzc2lvbikgIT0gLTE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVdGlsaXp6YXRvIGRhIGhhc0FDRXhwcmVzc2lvbiBkZW50cm8gZXZhbFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0N1c3RvbSh2YWx1ZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGl0ZW1zID0gdGhpcy50YWdnZWRJdGVtc0NhY2hlLmZpbmQodCA9PiB0LmtleSA9PSB0YWcpPy5pdGVtcztcclxuICAgIGlmICghaXRlbXMpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgZm91bmQgPSBpdGVtcy5maW5kKHQgPT4gdCA9PSB2YWx1ZSlcclxuICAgICAgcmV0dXJuIGZvdW5kICE9IG51bGwgJiYgZm91bmQgIT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnkgcG9pbnQgY2hlIGNvbnRyb2xsYSB1bidlc3ByZXNzaW9uZSBpZGVudGlmaWNhbnRlIHVuIHBlcm1lc3NvLCBhZCBlc2VtcGlvIFwiUDp2aXN1YWxpenphemlvbmVcIiBjb250cm9sbGEgY2hlIGwndXRlbnRlIGNvbGxlZ2F0byBhYmJpYSB1biBwZXJtZXNzbyBjaGUgc2kgY2hpYW1hIFwidmlzdWFsaXp6YXppb25lXCJcclxuICAgKi9cclxuICBwdWJsaWMgaGFzKGV4cHI6IHN0cmluZywgYWJzb2x1dGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQUNFeHByZXNzaW9uKGV4cHIsIGFic29sdXRlKTtcclxuICB9XHJcbn0iXX0=
@@ -1,42 +1,42 @@
1
- // Angular
2
- import { Directive, Optional, Inject } from "@angular/core";
3
- import { ACC_CUSTOMKEY } from "./tokens";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./models/ComponentContext";
6
- import * as i2 from "./access-control.service";
7
- /**
8
- * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.
9
- *
10
- * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext
11
- */
12
- export class ContextAwareDirective {
13
- /**
14
- * Costruttore
15
- *
16
- * @ignore
17
- */
18
- constructor(element, context, ac, ACC_CUSTOMKEY) {
19
- this.context = context;
20
- this.ac = ac;
21
- this.ACC_CUSTOMKEY = ACC_CUSTOMKEY;
22
- var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + ":" + this.context.name);
23
- if (!allow)
24
- element.nativeElement.setAttribute("enabled", "true");
25
- }
26
- }
27
- ContextAwareDirectivefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", 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: "15.2.9", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ContextAwareDirective, decorators: [{
30
- type: Directive,
31
- args: [{
32
- selector: '[contextAware]',
33
- }]
34
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ComponentContext, decorators: [{
35
- type: Optional
36
- }] }, { type: i2.AccessControlService }, { type: undefined, decorators: [{
37
- type: Optional
38
- }, {
39
- type: Inject,
40
- args: [ACC_CUSTOMKEY]
41
- }] }]; } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1hd2FyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvbGliL2NvbnRleHQtYXdhcmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsU0FBUyxFQUFjLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7OztBQUt4Qzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUU5Qjs7OztPQUlHO0lBQ0gsWUFBWSxPQUFtQixFQUFzQixPQUF5QixFQUFVLEVBQXdCLEVBQTZDLGFBQXFCO1FBQTdILFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFBNkMsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDOUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFFLENBQUM7UUFFckksSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7a0hBWlEscUJBQXFCLGdJQU93RyxhQUFhO3NHQVAxSSxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUM3Qjs7MEJBUXFDLFFBQVE7OzBCQUF5RSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gXCIuL2FjY2Vzcy1jb250cm9sLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQUNDX0NVU1RPTUtFWSB9IGZyb20gXCIuL3Rva2Vuc1wiXHJcblxyXG4vLyBDbGFzc2lcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gXCIuL21vZGVscy9Db21wb25lbnRDb250ZXh0XCI7XHJcblxyXG4vKipcclxuICogRGlyZXR0aXZhIGNoZSBwZXJtZXR0ZSBkaSBjYXBpcmUgc2UgbCdlbGVtZW50byBIVE1MIHN1IGN1aSDDqCB1dGlsaXp6YXRhIGRldidlc3NlcmUgZGlzYWJpbGl0YXRvIG8gbm8uXHJcbiAqIFxyXG4gKiBOb24gaGEgZWZmZXR0byBzdWdsaSBlbGVtZW50aSBkaWNoaWFyYXRpIGluIGNvbXBvbmVudGkgY2hlIG5vbiBkaWNoaWFyYW5vIGFsY3VuIENvbXBvbmVudENvbnRleHRcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbY29udGV4dEF3YXJlXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0QXdhcmVEaXJlY3RpdmUge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIEBPcHRpb25hbCgpIHByaXZhdGUgY29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgcHJpdmF0ZSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0NVU1RPTUtFWSkgcHJpdmF0ZSBBQ0NfQ1VTVE9NS0VZOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxsb3cgPSAhdGhpcy5jb250ZXh0IHx8ICF0aGlzLmNvbnRleHQubmFtZSB8fCAhdGhpcy5BQ0NfQ1VTVE9NS0VZIHx8IHRoaXMuYWMuaGFzKHRoaXMuQUNDX0NVU1RPTUtFWSArIFwiOlwiICsgdGhpcy5jb250ZXh0Lm5hbWUsKTtcclxuXHJcbiAgICAgICAgaWYgKCFhbGxvdylcclxuICAgICAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcImVuYWJsZWRcIiwgXCJ0cnVlXCIpO1xyXG4gICAgfVxyXG59Il19
1
+ // Angular
2
+ import { Directive, Optional, Inject } from "@angular/core";
3
+ import { ACC_CUSTOMKEY } from "./tokens";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./models/ComponentContext";
6
+ import * as i2 from "./access-control.service";
7
+ /**
8
+ * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.
9
+ *
10
+ * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext
11
+ */
12
+ export class ContextAwareDirective {
13
+ /**
14
+ * Costruttore
15
+ *
16
+ * @ignore
17
+ */
18
+ constructor(element, context, ac, ACC_CUSTOMKEY) {
19
+ this.context = context;
20
+ this.ac = ac;
21
+ this.ACC_CUSTOMKEY = ACC_CUSTOMKEY;
22
+ var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + ":" + this.context.name);
23
+ if (!allow)
24
+ element.nativeElement.setAttribute("enabled", "true");
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.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 }); }
27
+ static { thisdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextAwareDirective, decorators: [{
30
+ type: Directive,
31
+ args: [{
32
+ selector: '[contextAware]',
33
+ }]
34
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ComponentContext, decorators: [{
35
+ type: Optional
36
+ }] }, { type: i2.AccessControlService }, { type: undefined, decorators: [{
37
+ type: Optional
38
+ }, {
39
+ type: Inject,
40
+ args: [ACC_CUSTOMKEY]
41
+ }] }]; } });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1hd2FyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvbGliL2NvbnRleHQtYXdhcmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsU0FBUyxFQUFjLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7OztBQUt4Qzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUU5Qjs7OztPQUlHO0lBQ0gsWUFBWSxPQUFtQixFQUFzQixPQUF5QixFQUFVLEVBQXdCLEVBQTZDLGFBQXFCO1FBQTdILFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFBNkMsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDOUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFFLENBQUM7UUFFckksSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQzsrR0FaUSxxQkFBcUIsZ0lBT3dHLGFBQWE7bUdBUDFJLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUM3Qjs7MEJBUXFDLFFBQVE7OzBCQUF5RSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gXCIuL2FjY2Vzcy1jb250cm9sLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQUNDX0NVU1RPTUtFWSB9IGZyb20gXCIuL3Rva2Vuc1wiXHJcblxyXG4vLyBDbGFzc2lcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gXCIuL21vZGVscy9Db21wb25lbnRDb250ZXh0XCI7XHJcblxyXG4vKipcclxuICogRGlyZXR0aXZhIGNoZSBwZXJtZXR0ZSBkaSBjYXBpcmUgc2UgbCdlbGVtZW50byBIVE1MIHN1IGN1aSDDqCB1dGlsaXp6YXRhIGRldidlc3NlcmUgZGlzYWJpbGl0YXRvIG8gbm8uXHJcbiAqIFxyXG4gKiBOb24gaGEgZWZmZXR0byBzdWdsaSBlbGVtZW50aSBkaWNoaWFyYXRpIGluIGNvbXBvbmVudGkgY2hlIG5vbiBkaWNoaWFyYW5vIGFsY3VuIENvbXBvbmVudENvbnRleHRcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbY29udGV4dEF3YXJlXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0QXdhcmVEaXJlY3RpdmUge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIEBPcHRpb25hbCgpIHByaXZhdGUgY29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgcHJpdmF0ZSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0NVU1RPTUtFWSkgcHJpdmF0ZSBBQ0NfQ1VTVE9NS0VZOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxsb3cgPSAhdGhpcy5jb250ZXh0IHx8ICF0aGlzLmNvbnRleHQubmFtZSB8fCAhdGhpcy5BQ0NfQ1VTVE9NS0VZIHx8IHRoaXMuYWMuaGFzKHRoaXMuQUNDX0NVU1RPTUtFWSArIFwiOlwiICsgdGhpcy5jb250ZXh0Lm5hbWUsKTtcclxuXHJcbiAgICAgICAgaWYgKCFhbGxvdylcclxuICAgICAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcImVuYWJsZWRcIiwgXCJ0cnVlXCIpO1xyXG4gICAgfVxyXG59Il19
@@ -1,6 +1,6 @@
1
- /**
2
- * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'
3
- */
4
- export class AccessControlModuleConfig {
5
- }
1
+ /**
2
+ * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'
3
+ */
4
+ export class AccessControlModuleConfig {
5
+ }
6
6
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzQ29udHJvbE1vZHVsZUNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvbW9kZWxzL0FjY2Vzc0NvbnRyb2xNb2R1bGVDb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0NBYXJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXppb25lIE1vZHVsbyBBY2Nlc3NDb250cm9sLiBTZSBub24gZm9ybml0YSB2ZXJyw6AgZ2VuZXJhdGEgYXV0b21hdGljYW1lbnRlIGNvbiBsb2NhbGUgJ2l0LUlUJ1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xNb2R1bGVDb25maWcge1xyXG5cclxuICAgIC8qKiBDaGlhdmUgY3VzdG9tIHN1IGN1aSBsYSAqKmNvbnRleHRBd2FyZURpcmVjdGl2ZSoqIHNpIGJhc2EgcGVyIGNvbnRyb2xsYXJlIHNlIGwnZWxlbWVudG8gw6ggYWJpbGl0YXRvIG8gbWVubyAqL1xyXG4gICAgY29udGV4dEF3YXJlS2V5Pzogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBDb25kaXppb25lIGRpIGRlZmF1bHQgZGEgYWdnaXVuZ2VyZSBhIG9nbmkgY29uZGl6aW9uZSB1dGVudGUuIEVzOiAnUjpKYWNlIEFkbWluJyAqL1xyXG4gICAgZGVmYXVsdENvbmRpdGlvbj86IHN0cmluZztcclxuXHJcbiAgICAvKiogUmVsYXppb25lIGxvZ2ljYSBmcmEgbGEgY29uZGl6aW9uZSBkaSBkZWZhdWx0IGUgbGEgY29uZGl6aW9uZSB1dGVudGUuIEVzOiAnfHwnLiBEaSBkZWZhdWx0IHZpZW5lIHV0aWxpenphdG8gbCdPUiBsb2dpY28gKi9cclxuICAgIGRlZmF1bHRDb25kaXRpb25Mb2dpY2FsT3BlcmF0b3I/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEF0dGl2YSBsYSBtb2RhbGl0w6AgZGkgZGVidWcgcGVyIGwnZXNwb3NpemlvbmUgZGkgbWVzc2FnZ2kgc2lnbmlmaWNhdGl2aSAqL1xyXG4gICAgZGVidWdNb2RlPzogYm9vbGVhbjtcclxufSJdfQ==