@esfaenza/access-control 12.2.10 → 13.1.2

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 (35) hide show
  1. package/esfaenza-access-control.d.ts +1 -1
  2. package/esm2020/esfaenza-access-control.mjs +5 -0
  3. package/esm2020/lib/AccessControlRouteGuard.mjs +122 -0
  4. package/esm2020/lib/access-control.directive.mjs +47 -0
  5. package/esm2020/lib/access-control.module.mjs +33 -0
  6. package/esm2020/lib/access-control.service.mjs +133 -0
  7. package/esm2020/lib/context-aware.directive.mjs +42 -0
  8. package/{esm2015/lib/models/AccessControlModuleConfig.js → esm2020/lib/models/AccessControlModuleConfig.mjs} +0 -0
  9. package/esm2020/lib/models/ComponentContext.mjs +13 -0
  10. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  11. package/esm2020/public-api.mjs +12 -0
  12. package/fesm2015/{esfaenza-access-control.js → esfaenza-access-control.mjs} +66 -52
  13. package/fesm2015/esfaenza-access-control.mjs.map +1 -0
  14. package/fesm2020/esfaenza-access-control.mjs +392 -0
  15. package/fesm2020/esfaenza-access-control.mjs.map +1 -0
  16. package/lib/AccessControlRouteGuard.d.ts +3 -0
  17. package/lib/access-control.directive.d.ts +3 -0
  18. package/lib/access-control.module.d.ts +7 -0
  19. package/lib/access-control.service.d.ts +3 -0
  20. package/lib/context-aware.directive.d.ts +3 -0
  21. package/lib/models/ComponentContext.d.ts +3 -0
  22. package/package.json +23 -11
  23. package/public-api.d.ts +1 -0
  24. package/bundles/esfaenza-access-control.umd.js +0 -413
  25. package/bundles/esfaenza-access-control.umd.js.map +0 -1
  26. package/esfaenza-access-control.metadata.json +0 -1
  27. package/esm2015/esfaenza-access-control.js +0 -6
  28. package/esm2015/lib/AccessControlRouteGuard.js +0 -120
  29. package/esm2015/lib/access-control.directive.js +0 -50
  30. package/esm2015/lib/access-control.module.js +0 -28
  31. package/esm2015/lib/access-control.service.js +0 -132
  32. package/esm2015/lib/context-aware.directive.js +0 -39
  33. package/esm2015/lib/models/ComponentContext.js +0 -10
  34. package/esm2015/public-api.js +0 -11
  35. package/fesm2015/esfaenza-access-control.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
+ /// <amd-module name="@esfaenza/access-control" />
4
5
  export * from './public-api';
5
- export { ContextAwareDirective as ɵa } from './lib/context-aware.directive';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNmYWVuemEtYWNjZXNzLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvZXNmYWVuemEtYWNjZXNzLWNvbnRyb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,122 @@
1
+ import { Injectable, Optional, Inject } from "@angular/core";
2
+ //Libs
3
+ import { LocalizationService } from "@esfaenza/localizations";
4
+ //Models
5
+ import { ACC_LOCALE } from "./tokens";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@esfaenza/extensions";
8
+ import * as i2 from "./access-control.service";
9
+ import * as i3 from "@angular/router";
10
+ /**
11
+ * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe
12
+ * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:
13
+ *
14
+ * ```typescript
15
+ * @Injectable()
16
+ * export class HasAuthGuardComponent extends BaseRouterGuard {
17
+ * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {
18
+ * super(ms, acc, router, ts);
19
+ * this.Routes = [
20
+ * { route: "page_route", permission: "P:perm_one" },
21
+ * { route: "*", permission: "R:role_one" }
22
+ * ]
23
+ * }
24
+ * }
25
+ * ```
26
+ */
27
+ export class AccessControlRouteGuard {
28
+ /**
29
+ * @ignore
30
+ */
31
+ constructor(msgService, ac, router, LOCALE) {
32
+ this.msgService = msgService;
33
+ this.ac = ac;
34
+ this.router = router;
35
+ /**
36
+ * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi
37
+ *
38
+ * @default
39
+ */
40
+ this.LoginRoute = "login";
41
+ /**
42
+ * Permette di specificare delle Route sempre consentite, anche a livello di "Radice". Ad esempio la Root "test" permetterà
43
+ * l'accesso a tutte le route che anche solo iniziano per "test"
44
+ */
45
+ this.AlwaysAllowedRoots = [];
46
+ /**
47
+ * Lista di Route con la loro espressione di controllo per valutare i permessi
48
+ */
49
+ this.Routes = [];
50
+ this.lc = new LocalizationService(LOCALE ?? 'it-IT');
51
+ }
52
+ /**
53
+ * @ignore
54
+ */
55
+ canActivateChild(route, _) {
56
+ var url = route.url.join('/');
57
+ //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite
58
+ if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))
59
+ return Promise.resolve(false);
60
+ var routeMatched = false;
61
+ for (let i = 0; i < this.Routes.length; i++) {
62
+ let r = this.Routes[i];
63
+ //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare
64
+ if (url.indexOf(r.route) != -1) {
65
+ routeMatched = true;
66
+ return this.handleMatch(url, r);
67
+ }
68
+ }
69
+ //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella
70
+ if (!routeMatched) {
71
+ var wildcardRoute = this.Routes.find(r => r.route == "*");
72
+ if (wildcardRoute)
73
+ return this.handleMatch(url, wildcardRoute);
74
+ else
75
+ console.log("Navigaizone avvenuta su route sconosciuta: " + url);
76
+ }
77
+ return Promise.resolve(true);
78
+ }
79
+ /**
80
+ * @ignore
81
+ */
82
+ handleMatch(fromurl, r) {
83
+ let identity = this.ac.Identity;
84
+ if (this.ac.has(r.permission) ||
85
+ (
86
+ // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente
87
+ // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci
88
+ // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve
89
+ this.ac.Initialized &&
90
+ (!identity.Roles || identity.Roles.length == 0) &&
91
+ (!identity.Permissions || identity.Permissions.length == 0)))
92
+ return Promise.resolve(true);
93
+ else {
94
+ //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione
95
+ //Se ho aperto una nuova tab invece rispedisco al login
96
+ if (window.history.length > 2 && this.ac.isLoggedIn()) {
97
+ this.msgService.simpleError(this.lc.loc("You don't have the required permissions to view this page. The navigation has been blocked"));
98
+ return Promise.resolve(false);
99
+ }
100
+ else {
101
+ this.onRedirectInProgress();
102
+ this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);
103
+ }
104
+ }
105
+ }
106
+ /**
107
+ * Callback che viene eseguito prima che la Guard reindirizzi al login
108
+ */
109
+ onRedirectInProgress() {
110
+ }
111
+ }
112
+ AccessControlRouteGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", 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: "13.1.1", ngImport: i0, type: AccessControlRouteGuard });
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlRouteGuard, decorators: [{
115
+ type: Injectable
116
+ }], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.AccessControlService }, { type: i3.Router }, { type: undefined, decorators: [{
117
+ type: Optional
118
+ }, {
119
+ type: Inject,
120
+ args: [ACC_LOCALE]
121
+ }] }]; } });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzQ29udHJvbFJvdXRlR3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvbGliL0FjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxNQUFNO0FBQ04sT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHOUQsUUFBUTtBQUNSLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7O0FBR3RDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQXdCaEM7O09BRUc7SUFDSCxZQUFvQixVQUEyQixFQUFVLEVBQXdCLEVBQVUsTUFBYyxFQUFrQyxNQUFjO1FBQXJJLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBckJ6Rzs7OztXQUlHO1FBQ08sZUFBVSxHQUFZLE9BQU8sQ0FBQztRQUV4Qzs7O1dBR0c7UUFDTyx1QkFBa0IsR0FBYSxFQUFFLENBQUM7UUFFNUM7O1dBRUc7UUFDTyxXQUFNLEdBQTBDLEVBQUUsQ0FBQztRQU16RCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksbUJBQW1CLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLEtBQTZCLEVBQUUsQ0FBc0I7UUFDbEUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxD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QkE0QnFHLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vQW5ndWxhclxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUNoaWxkLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLy9MaWJzXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vTW9kZWxzXHJcbmltcG9ydCB7IEFDQ19MT0NBTEUgfSBmcm9tIFwiLi90b2tlbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL2FjY2Vzcy1jb250cm9sLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFJvdXRlciBHdWFyZCBiYXNlIHBlciBwcm90ZWdnZXJlIGwnYWNjZXNzbyBhbGxlIHJvdXRlIGRlbGwnYXBwbGljYXppb25lLiBQZXIgdXRpbGl6emFybGEgw6ggc3VmZmljaWVudGUgZXJlZGl0YXJsYSBlLCBuZWwgY29zdHJ1dHRvcmUgZGVsbGEgY2xhc3NlXHJcbiAqIGNoZSBsYSBlcmVkaXRhdmFsb3JpenphcmUgbGEgdmFyaWFiaWxlIFJvdXRlcyBjb24gbGUgcm91dGUgcGVybWVzc2UgZGFsIG1vZHVsbyBlIGlsIHBlcm1lc3NvIHBlciBjdWkgc2kgdnVvbGUgcmlzZXJ2YXJlIGwnYWNjZXNzby4gQWQgZXNlbXBpbzpcclxuICogXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogQEluamVjdGFibGUoKVxyXG4gKiBleHBvcnQgY2xhc3MgSGFzQXV0aEd1YXJkQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJvdXRlckd1YXJkIHtcclxuICogICAgICBjb25zdHJ1Y3RvcihhY2M6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCByb3V0ZXI6IFJvdXRlciwgbXM6IE1lc3NhZ2VTZXJ2aWNlLCB0czogQmFzZVRva2VuU2VydmljZSkge1xyXG4gKiAgICAgICAgICBzdXBlcihtcywgYWNjLCByb3V0ZXIsIHRzKTtcclxuICogICAgICAgICAgdGhpcy5Sb3V0ZXMgPSBbXHJcbiAqICAgICAgICAgICAgICB7IHJvdXRlOiBcInBhZ2Vfcm91dGVcIiwgcGVybWlzc2lvbjogXCJQOnBlcm1fb25lXCIgfSxcclxuICogICAgICAgICAgICAgIHsgcm91dGU6IFwiKlwiLCBwZXJtaXNzaW9uOiBcIlI6cm9sZV9vbmVcIiB9XHJcbiAqICAgICAgICAgIF1cclxuICogICAgICB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sUm91dGVHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlQ2hpbGQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbGM6IExvY2FsaXphdGlvblNlcnZpY2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3V0ZSBkaSBsb2dpbiBjaGUgc2VydmUgcGVyIHJlaW5kaXJpenphcmUgYWxsYSBwYWdpbmEgZGkgbG9naW4gaW4gY2FzbyBkaSBmYWxsaW1lbnRvIGRlbCBjb250cm9sbG8gc3VpIFBlcm1lc3NpXHJcbiAgICAgKiBcclxuICAgICAqIEBkZWZhdWx0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBMb2dpblJvdXRlIDogc3RyaW5nID0gXCJsb2dpblwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVybWV0dGUgZGkgc3BlY2lmaWNhcmUgZGVsbGUgUm91dGUgc2VtcHJlIGNvbnNlbnRpdGUsIGFuY2hlIGEgbGl2ZWxsbyBkaSBcIlJhZGljZVwiLiBBZCBlc2VtcGlvIGxhIFJvb3QgXCJ0ZXN0XCIgcGVybWV0dGVyw6BcclxuICAgICAqIGwnYWNjZXNzbyBhIHR1dHRlIGxlIHJvdXRlIGNoZSBhbmNoZSBzb2xvIGluaXppYW5vIHBlciBcInRlc3RcIlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgQWx3YXlzQWxsb3dlZFJvb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRpIFJvdXRlIGNvbiBsYSBsb3JvIGVzcHJlc3Npb25lIGRpIGNvbnRyb2xsbyBwZXIgdmFsdXRhcmUgaSBwZXJtZXNzaVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgUm91dGVzOiB7IHJvdXRlOiBhbnk7IHBlcm1pc3Npb246IHN0cmluZzsgfVtdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbXNnU2VydmljZSA6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgQE9wdGlvbmFsKCkgQEluamVjdChBQ0NfTE9DQUxFKSBMT0NBTEU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubGMgPSBuZXcgTG9jYWxpemF0aW9uU2VydmljZShMT0NBTEUgPz8gJ2l0LUlUJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNhbkFjdGl2YXRlQ2hpbGQocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIF86IFJvdXRlclN0YXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB2YXIgdXJsID0gcm91dGUudXJsLmpvaW4oJy8nKTtcclxuICAgICAgICAvL1NlIGwnYXBwbGljYXppb25lIG5vbiDDqCBwcm9udGEgZSBub24gc3RvIG5hdmlnYW5kbyBuZWxsZSBwYWdpbmUgY29uc2VudGl0ZVxyXG4gICAgICAgIGlmICghdGhpcy5hYy5Jbml0aWFsaXplZCAmJiAhdGhpcy5BbHdheXNBbGxvd2VkUm9vdHMuZmluZChyID0+IHVybC5pbmRleE9mKHIpICE9IC0xKSlcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHZhciByb3V0ZU1hdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuUm91dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCByID0gdGhpcy5Sb3V0ZXNbaV07XHJcbiAgICAgICAgICAgIC8vU2UgZmFjY2lvIG1hdGNoIGNvbiBsYSByb3V0ZSBzaWduaWZpY2EgY2hlIGhvIG5hdmlnYXRvIGluIHVuYSBkZWxsZSByb3V0ZSBjb25vc2NpdXRlLCBhbHRyaW1lbnRpIGF2dmVydG8gbWEgbGFzY2lvIGFuZGFyZVxyXG4gICAgICAgICAgICBpZiAodXJsLmluZGV4T2Yoci5yb3V0ZSkgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJvdXRlTWF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVNYXRjaCh1cmwsIHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vU2Ugbm9uIGZhY2NpbyBuZXNzdW4gbWF0Y2ggbWEgaG8gdW5hIHJvdXRlIHdpbGRjYXJkICgqKSBwcmVuZG8gcXVlbGxhIGUgY29udHJvbGxvIHN1IHF1ZWxsYVxyXG4gICAgICAgIGlmICghcm91dGVNYXRjaGVkKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWxkY2FyZFJvdXRlID0gdGhpcy5Sb3V0ZXMuZmluZChyID0+IHIucm91dGUgPT0gXCIqXCIpO1xyXG4gICAgICAgICAgICBpZiAod2lsZGNhcmRSb3V0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZU1hdGNoKHVybCwgd2lsZGNhcmRSb3V0ZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTmF2aWdhaXpvbmUgYXZ2ZW51dGEgc3Ugcm91dGUgc2Nvbm9zY2l1dGE6IFwiICsgdXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVNYXRjaChmcm9tdXJsOiBzdHJpbmcsIHI6IGFueSkge1xyXG4gICAgICAgIGxldCBpZGVudGl0eSA9IHRoaXMuYWMuSWRlbnRpdHk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjLmhhcyhyLnBlcm1pc3Npb24pIHx8XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgIC8vIENvbnNpZGVybyBhbmNoZSBsYSBwb3NzaWJpbGl0w6AgZGkgYXZlcmUgbCdhY2Nlc3MgY29udHJvbCBpbml6aWFsaXp6YXRvIG1hIGNoZSBsJ2FjY291bnQgc2NvcGUgbm9uIHNpYSBhbmNvcmEgcHJlc2VudGVcclxuICAgICAgICAgICAgICAgIC8vIGluIHF1ZXN0byBjYXNvIHN1cHBvbmdvIHNpYSB1biBoYXJkIHJlZnJlc2ggZSBtaSBmaWRvIGRlbCBmYXR0byBjaGUgbCd1dGVudGUgcG9zc2EgZW50cmFyY2lcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IEZpeGFyZSBtZWdsaW8gY29uY2F0ZW5hbmRvIHVuYSBwcm9taXNlIGNoZSB2YSBhIHByZW5kZXJlIGwnYWNjb3VudCBzY29wZSBzZSBzZXJ2ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hYy5Jbml0aWFsaXplZCAmJlxyXG4gICAgICAgICAgICAgICAgKCFpZGVudGl0eS5Sb2xlcyB8fCBpZGVudGl0eS5Sb2xlcy5sZW5ndGggPT0gMCkgJiZcclxuICAgICAgICAgICAgICAgICghaWRlbnRpdHkuUGVybWlzc2lvbnMgfHwgaWRlbnRpdHkuUGVybWlzc2lvbnMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBuZWwgc2l0byBvcmlnaW5hbGUgKG5vbiBobyBhcGVydG8gdW4gbmV3dGFiKSBibG9jY28gbGEgbmF2aWdhemlvbmVcclxuICAgICAgICAgICAgLy9TZSBobyBhcGVydG8gdW5hIG51b3ZhIHRhYiBpbnZlY2UgcmlzcGVkaXNjbyBhbCBsb2dpblxyXG4gICAgICAgICAgICBpZiAod2luZG93Lmhpc3RvcnkubGVuZ3RoID4gMiAmJiB0aGlzLmFjLmlzTG9nZ2VkSW4oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLnNpbXBsZUVycm9yKHRoaXMubGMubG9jKFwiWW91IGRvbid0IGhhdmUgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHZpZXcgdGhpcyBwYWdlLiBUaGUgbmF2aWdhdGlvbiBoYXMgYmVlbiBibG9ja2VkXCIpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJlZGlyZWN0SW5Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuTG9naW5Sb3V0ZSwgeyBmcm9tVXJsOiBmcm9tdXJsIH1dKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGNoZSB2aWVuZSBlc2VndWl0byBwcmltYSBjaGUgbGEgR3VhcmQgcmVpbmRpcml6emkgYWwgbG9naW5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uUmVkaXJlY3RJblByb2dyZXNzKCkge1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,47 @@
1
+ // Angular
2
+ import { Directive, Input } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./access-control.service";
5
+ /**
6
+ * Direttiva che permette di gestire il controllo accessi su componenti HTML.
7
+ *
8
+ * Per gli esempi di utilizzo fare riferimento al README.
9
+ */
10
+ export class AccessControlDirective {
11
+ /**
12
+ * Costruttore
13
+ *
14
+ * @ignore
15
+ */
16
+ constructor(templateRef, viewContainer, _ac) {
17
+ this.templateRef = templateRef;
18
+ this.viewContainer = viewContainer;
19
+ this._ac = _ac;
20
+ }
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);
30
+ //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template
31
+ if (allow)
32
+ this.viewContainer.createEmbeddedView(this.templateRef);
33
+ else
34
+ this.viewContainer.clear();
35
+ }
36
+ }
37
+ AccessControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.AccessControlService }], target: i0.ɵɵFactoryTarget.Directive });
38
+ AccessControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: AccessControlDirective, selector: "[ac]", inputs: { ac: "ac" }, ngImport: i0 });
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlDirective, decorators: [{
40
+ type: Directive,
41
+ args: [{
42
+ selector: '[ac]',
43
+ }]
44
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.AccessControlService }]; }, propDecorators: { ac: [{
45
+ type: Input
46
+ }] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNjZXNzLWNvbnRyb2wvc3JjL2xpYi9hY2Nlc3MtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFpQyxNQUFNLGVBQWUsQ0FBQzs7O0FBS2hGOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sc0JBQXNCO0lBRS9COzs7O09BSUc7SUFDSCxZQUFvQixXQUE2QixFQUFVLGFBQStCLEVBQVUsR0FBeUI7UUFBekcsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBc0I7SUFBSSxDQUFDO0lBRWxJOzs7Ozs7T0FNRztJQUNILElBQWEsRUFBRSxDQUFDLFVBQWtCO1FBQzlCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXJDLHFGQUFxRjtRQUVyRixJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7WUFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzttSEF2QlEsc0JBQXNCO3VHQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFIbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsTUFBTTtpQkFDbkI7b0tBaUJnQixFQUFFO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIH0gZnJvbSBcIi4vYWNjZXNzLWNvbnRyb2wuc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIERpcmV0dGl2YSBjaGUgcGVybWV0dGUgZGkgZ2VzdGlyZSBpbCBjb250cm9sbG8gYWNjZXNzaSBzdSBjb21wb25lbnRpIEhUTUwuIFxyXG4gKiBcclxuICogUGVyIGdsaSBlc2VtcGkgZGkgdXRpbGl6em8gZmFyZSByaWZlcmltZW50byBhbCBSRUFETUUuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2FjXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sRGlyZWN0aXZlIHtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZSBcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHByaXZhdGUgX2FjOiBBY2Nlc3NDb250cm9sU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnB1dCBhdXRvcmVmZXJlbnppYWxlIHBlciBsYSBkaXJldHRpdmFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gIGVzcHJlc3Npb25lIGRhIHByb2Nlc3NhcmUgc2NyaXR0YSBjb21lIHtDaGlhdmV9OntWYWxvcmV9XHJcbiAgICAgKiBcclxuICAgICAqIExlIHtDaGlhdmV9IGRpc3BvbmliaWxpIHNvbm8gZGkgZGVmYXVsdCBcIlJcIiBwZXIgaSBydW9saSBlIFwiUFwiIHBlciBpIHBlcm1lc3NpLiDDiCBwb3NzaWJpbGUgZXNwYW5kZXJsZSBjb24gbGUgQ3VzdG9tIFBlcm1pc3Npb25zXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBhYyhleHByZXNzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxsb3cgPSB0aGlzLl9hYy5oYXMoZXhwcmVzc2lvbik7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gaSBwZXJtZXNzaSwgcHJvc2VndW8gY3JlYW5kbyBsYSB2aXN0YSBuZWwgRE9NLCBhbHRyaW1lbnRpIHJpbXVvdm8gaWwgdGVtcGxhdGVcclxuXHJcbiAgICAgICAgaWYgKGFsbG93KSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xyXG4gICAgICAgIGVsc2UgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,33 @@
1
+ import { LocalizationModule } from '@esfaenza/localizations';
2
+ import { NgModule } from '@angular/core';
3
+ import { ACC_LOCALE, ACC_CUSTOMKEY } from './tokens';
4
+ import { AccessControlService } from './access-control.service';
5
+ import { AccessControlRouteGuard } from './AccessControlRouteGuard';
6
+ import { AccessControlDirective } from './access-control.directive';
7
+ import { ContextAwareDirective } from './context-aware.directive';
8
+ import * as i0 from "@angular/core";
9
+ export class AccessControlModule {
10
+ static forRoot(config) {
11
+ return {
12
+ ngModule: AccessControlModule,
13
+ providers: [
14
+ AccessControlService,
15
+ AccessControlRouteGuard,
16
+ { provide: ACC_LOCALE, useValue: config?.locale || 'it-IT' },
17
+ { provide: ACC_CUSTOMKEY, useValue: config?.customKey || null }
18
+ ]
19
+ };
20
+ }
21
+ }
22
+ AccessControlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
+ AccessControlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlModule, declarations: [AccessControlDirective, ContextAwareDirective], imports: [LocalizationModule], exports: [AccessControlDirective, ContextAwareDirective] });
24
+ AccessControlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlModule, imports: [[LocalizationModule]] });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ imports: [LocalizationModule],
29
+ declarations: [AccessControlDirective, ContextAwareDirective],
30
+ exports: [AccessControlDirective, ContextAwareDirective]
31
+ }]
32
+ }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNjZXNzLWNvbnRyb2wvc3JjL2xpYi9hY2Nlc3MtY29udHJvbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBT2xFLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFrQztRQUMvQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLG1CQUFtQjtZQUM3QixTQUFTLEVBQUU7Z0JBQ1Qsb0JBQW9CO2dCQUNwQix1QkFBdUI7Z0JBQ3ZCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVELEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUU7YUFDaEU7U0FDRixDQUFDO0lBQ0osQ0FBQzs7Z0hBWFUsbUJBQW1CO2lIQUFuQixtQkFBbUIsaUJBSGYsc0JBQXNCLEVBQUUscUJBQXFCLGFBRGxELGtCQUFrQixhQUVuQixzQkFBc0IsRUFBRSxxQkFBcUI7aUhBRTNDLG1CQUFtQixZQUpyQixDQUFDLGtCQUFrQixDQUFDOzJGQUlsQixtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7b0JBQzdCLFlBQVksRUFBRSxDQUFDLHNCQUFzQixFQUFFLHFCQUFxQixDQUFDO29CQUM3RCxPQUFPLEVBQUMsQ0FBQyxzQkFBc0IsRUFBRSxxQkFBcUIsQ0FBQztpQkFDeEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhbGl6YXRpb25Nb2R1bGUgfSBmcm9tICdAZXNmYWVuemEvbG9jYWxpemF0aW9ucyc7XHJcbmltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBBQ0NfTE9DQUxFLCBBQ0NfQ1VTVE9NS0VZfSBmcm9tICcuL3Rva2Vucyc7XHJcblxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvQWNjZXNzQ29udHJvbE1vZHVsZUNvbmZpZyc7XHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi9hY2Nlc3MtY29udHJvbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFJvdXRlR3VhcmQgfSBmcm9tICcuL0FjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkJztcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vYWNjZXNzLWNvbnRyb2wuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGV4dEF3YXJlRGlyZWN0aXZlIH0gZnJvbSAnLi9jb250ZXh0LWF3YXJlLmRpcmVjdGl2ZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtMb2NhbGl6YXRpb25Nb2R1bGVdLFxyXG4gIGRlY2xhcmF0aW9uczogW0FjY2Vzc0NvbnRyb2xEaXJlY3RpdmUsIENvbnRleHRBd2FyZURpcmVjdGl2ZV0sXHJcbiAgZXhwb3J0czpbQWNjZXNzQ29udHJvbERpcmVjdGl2ZSwgQ29udGV4dEF3YXJlRGlyZWN0aXZlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjZXNzQ29udHJvbE1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnPzogQWNjZXNzQ29udHJvbE1vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QWNjZXNzQ29udHJvbE1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IEFjY2Vzc0NvbnRyb2xNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLFxyXG4gICAgICAgIEFjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkLFxyXG4gICAgICAgIHsgcHJvdmlkZTogQUNDX0xPQ0FMRSwgdXNlVmFsdWU6IGNvbmZpZz8ubG9jYWxlIHx8ICdpdC1JVCcgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEFDQ19DVVNUT01LRVksIHVzZVZhbHVlOiBjb25maWc/LmN1c3RvbUtleSB8fCBudWxsIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn0iXX0=
@@ -0,0 +1,133 @@
1
+ // Angular
2
+ import { Injectable } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Entrypoint di tutte le operazioni esposte dalla libreria access-control
6
+ */
7
+ export class AccessControlService {
8
+ /** @ignore */
9
+ constructor() {
10
+ /**
11
+ * Indica se l'Identity è stata inizializzata
12
+ */
13
+ this.Initialized = false;
14
+ /**
15
+ * Indica se sono state effettuate inizializzazioni di Custom Permissions
16
+ */
17
+ this.InitializedCustom = false;
18
+ /** @ignore */
19
+ this.cache = {};
20
+ /** @ignore */
21
+ this.taggedItemsCache = [];
22
+ }
23
+ /**
24
+ * Inizializza l'Identity del servizio con il modello specificato
25
+ *
26
+ * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi
27
+ */
28
+ initializeIdentity(identity) {
29
+ this.Identity = identity;
30
+ this.Initialized = true;
31
+ }
32
+ /**
33
+ * Inizializza i permessi Custom del servizio con il modello specificato
34
+ *
35
+ * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom
36
+ */
37
+ initializeCustomPermissions(customPermissions) {
38
+ this.taggedItemsCache = customPermissions;
39
+ this.InitializedCustom = true;
40
+ }
41
+ /**
42
+ * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity
43
+ */
44
+ isLoggedIn() {
45
+ return !!this.Identity;
46
+ }
47
+ /**
48
+ * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)
49
+ * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P
50
+ *
51
+ * @ignore
52
+ */
53
+ hasACExpression(expression) {
54
+ if (!this.Initialized)
55
+ console.error("Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service");
56
+ if (!expression)
57
+ return true;
58
+ if (!this.Identity) {
59
+ console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
60
+ return true;
61
+ }
62
+ //Espressione già valutata, non serve rivalutarla
63
+ if (this.cache[expression])
64
+ return this.cache[expression];
65
+ var RolesPermissionsRegexp = /.:[^|&()]+/g;
66
+ var matches = expression.match(RolesPermissionsRegexp);
67
+ if (!matches)
68
+ throw "Espressione Access Control non valida: " + expression + ". Assicurarsi che sia scritta in modo corretto";
69
+ matches.forEach(t => {
70
+ var splits = t.split(':');
71
+ if (splits[0] == "R")
72
+ expression = expression.replace(t.trim(), "this.hasRole('" + splits[1].trim() + "')");
73
+ else if (splits[0] == "P")
74
+ expression = expression.replace(t.trim(), "this.hasPermission('" + splits[1].trim() + "')");
75
+ else
76
+ expression = expression.replace(t.trim(), "this.hasCustom('" + splits[1].trim() + "', '" + splits[0].trim() + "')");
77
+ });
78
+ var ret = eval(expression);
79
+ // Cache valore
80
+ this.cache[expression] = ret;
81
+ return ret;
82
+ }
83
+ /**
84
+ * Utilizzato da hasACExpression
85
+ *
86
+ * @ignore
87
+ */
88
+ hasRole(role) {
89
+ if (!this.Identity) {
90
+ console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
91
+ return true;
92
+ }
93
+ return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;
94
+ }
95
+ /**
96
+ * Utilizzato da hasACExpression
97
+ *
98
+ * @ignore
99
+ */
100
+ hasPermission(permission) {
101
+ if (!this.Identity) {
102
+ console.warn("Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default");
103
+ return true;
104
+ }
105
+ return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;
106
+ }
107
+ /**
108
+ * Utilizzato da hasACExpression
109
+ *
110
+ * @ignore
111
+ */
112
+ hasCustom(value, tag) {
113
+ var items = this.taggedItemsCache.find(t => t.key == tag)?.items;
114
+ if (!items)
115
+ return true;
116
+ else if (items.length == 0)
117
+ return false;
118
+ else
119
+ return !!items.find(t => t == value);
120
+ }
121
+ /**
122
+ * 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"
123
+ */
124
+ has(expr) {
125
+ return this.hasACExpression(expr);
126
+ }
127
+ }
128
+ AccessControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
129
+ AccessControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlService });
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AccessControlService, decorators: [{
131
+ type: Injectable
132
+ }], ctorParameters: function () { return []; } });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBdUIvQixjQUFjO0lBQ2Q7UUF0QkE7O1dBRUc7UUFDSSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUVwQzs7V0FFRztRQUNJLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUUxQyxjQUFjO1FBQ04sVUFBSyxHQUFPLEVBQUUsQ0FBQztRQUV2QixjQUFjO1FBQ04scUJBQWdCLEdBQXVDLEVBQUUsQ0FBQztJQVFsRCxDQUFDO0lBRWpCOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxRQUFvRDtRQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDJCQUEyQixDQUFDLGlCQUFxRDtRQUN0RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxlQUFlLENBQUMsVUFBa0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUhBQXVILENBQUMsQ0FBQztRQUV6SSxJQUFJLENBQUMsVUFBVTtZQUNiLE9BQU8sSUFBSSxD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O1FBQzFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUNqRSxJQUFJLENBQUMsS0FBSztZQUNSLE9BQU8sSUFBSSxDQUFDO2FBQ1QsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7O1lBRWIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxHQUFHLENBQUMsSUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7aUhBaEpVLG9CQUFvQjtxSEFBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqXHJcbiAqIEVudHJ5cG9pbnQgZGkgdHV0dGUgbGUgb3BlcmF6aW9uaSBlc3Bvc3RlIGRhbGxhIGxpYnJlcmlhIGFjY2Vzcy1jb250cm9sXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBsJ0lkZW50aXR5IMOoIHN0YXRhIGluaXppYWxpenphdGFcclxuICAgKi9cclxuICBwdWJsaWMgSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIHNvbm8gc3RhdGUgZWZmZXR0dWF0ZSBpbml6aWFsaXp6YXppb25pIGRpIEN1c3RvbSBQZXJtaXNzaW9uc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJbml0aWFsaXplZEN1c3RvbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgY2FjaGU6IHt9ID0ge307XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSB0YWdnZWRJdGVtc0NhY2hlOiB7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElkZW50aXR5IGFzc29jaWF0YSBhIHF1ZXN0J2lzdGFuemEgZGVsIFNlcnZpemlvIEFjY2VzcyBDb250cm9sLCB1dGlsZSBzZSBzaSB2dW9sZSBhdmVyZSBhY2Nlc3NvIGEgUnVvbGkgZSBQZXJtZXNzaSBkaXJldHRhbWVudGUgZGEgcXVpLCBwZXIgcXVhbHNpdm9nbGlhIG1vdGl2b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9O1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXppYWxpenphIGwnSWRlbnRpdHkgZGVsIHNlcnZpemlvIGNvbiBpbCBtb2RlbGxvIHNwZWNpZmljYXRvXHJcbiAgICogXHJcbiAgICogQHBhcmFtcyB7eyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9fSBpZGVudGl0eSBJZGVudGl0w6AgYXBwbGljYXRpdmEgY29uIHJ1b2xpIGUgcGVybWVzc2lcclxuICAgKi9cclxuICBwdWJsaWMgaW5pdGlhbGl6ZUlkZW50aXR5KGlkZW50aXR5OiB7IFJvbGVzOiBzdHJpbmdbXSwgUGVybWlzc2lvbnM6IHN0cmluZ1tdIH0pIHtcclxuICAgIHRoaXMuSWRlbnRpdHkgPSBpZGVudGl0eTtcclxuICAgIHRoaXMuSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pemlhbGl6emEgaSBwZXJtZXNzaSBDdXN0b20gZGVsIHNlcnZpemlvIGNvbiBpbCBtb2RlbGxvIHNwZWNpZmljYXRvXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHt7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdfSBjdXN0b21QZXJtaXNzaW9ucyBQZXJtZXNzaSBDdXN0b21cclxuICAgKi9cclxuICBwdWJsaWMgaW5pdGlhbGl6ZUN1c3RvbVBlcm1pc3Npb25zKGN1c3RvbVBlcm1pc3Npb25zOiB7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdKSB7XHJcbiAgICB0aGlzLnRhZ2dlZEl0ZW1zQ2FjaGUgPSBjdXN0b21QZXJtaXNzaW9ucztcclxuICAgIHRoaXMuSW5pdGlhbGl6ZWRDdXN0b20gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIG5lbGxhIHNlc3Npb25lIGF0dHVhbGUgZXNpc3RlIHVuIHV0ZW50ZSBsb2dnYXRvLiBGYSB1biBzZW1wbGljZSBjb250cm9sbG8gZGkgcHJlc2VuemEgc3VsbCdJZGVudGl0eVxyXG4gICAqL1xyXG4gIHB1YmxpYyBpc0xvZ2dlZEluKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5JZGVudGl0eTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cHJlc3Npb24gw6ggc2NyaXR0YSB0aXBvIC0tPiBSOlJvbGUxICYmIFA6UGVybWlzc2lvbjEgfHwgKFI6Um9sZTIgJiYgUDpQZXJtaXNzaW9uMSlcclxuICAgKiBRdWluZGkgcGl1dHRvc3RvIGNoZSBpbXBsZW1lbnRhcnNpIHVuIHBhcnNlciBkZWxsYSBtYWRvbm5hIGluIHN0aWxlIEFsZXNzYW5kcm8gcHJlbmRvIGxhIHN0cmFkYSBzdHJvbnphIGUgdmVsb2NlIGNvbiBsJ2V2YWwgOlBcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNBQ0V4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuSW5pdGlhbGl6ZWQpXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJBY2Nlc3MgQ29udHJvbCBTeXN0ZW0gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiBDYWxsIHRoaXMuYWNjZXNzQ29udHJvbC5pbml0aWFsaXplKC4uLiwgLi4uKSBiZWZvcmUgdXNpbmcgdGhlIHNlcnZpY2VcIik7XHJcblxyXG4gICAgaWYgKCFleHByZXNzaW9uKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuSWRlbnRpdHkpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRWxlbWVudG8gSWRlbnRpdHkgbm9uIHNwZWNpZmljYXRvIGluIEFjY2VzcyBDb250cm9sLiBHbGkgYWNjZXNzaSBzYXJhbm5vIHR1dHRpIGxpYmVyaSBkaSBkZWZhdWx0XCIpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vRXNwcmVzc2lvbmUgZ2nDoCB2YWx1dGF0YSwgbm9uIHNlcnZlIHJpdmFsdXRhcmxhXHJcbiAgICBpZiAodGhpcy5jYWNoZVtleHByZXNzaW9uXSlcclxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbZXhwcmVzc2lvbl07XHJcblxyXG4gICAgdmFyIFJvbGVzUGVybWlzc2lvbnNSZWdleHAgPSAvLjpbXnwmKCldKy9nO1xyXG5cclxuICAgIHZhciBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChSb2xlc1Blcm1pc3Npb25zUmVnZXhwKTtcclxuICAgIFxyXG4gICAgaWYgKCFtYXRjaGVzKVxyXG4gICAgICB0aHJvdyBcIkVzcHJlc3Npb25lIEFjY2VzcyBDb250cm9sIG5vbiB2YWxpZGE6IFwiICsgZXhwcmVzc2lvbiArIFwiLiBBc3NpY3VyYXJzaSBjaGUgc2lhIHNjcml0dGEgaW4gbW9kbyBjb3JyZXR0b1wiO1xyXG5cclxuICAgIG1hdGNoZXMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgdmFyIHNwbGl0cyA9IHQuc3BsaXQoJzonKTtcclxuICAgICAgaWYgKHNwbGl0c1swXSA9PSBcIlJcIilcclxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgZWxzZSBpZiAoc3BsaXRzWzBdID09IFwiUFwiKVxyXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UodC50cmltKCksIFwidGhpcy5oYXNQZXJtaXNzaW9uKCdcIiArIHNwbGl0c1sxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgXCJ0aGlzLmhhc0N1c3RvbSgnXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInLCAnXCIgKyBzcGxpdHNbMF0udHJpbSgpICsgXCInKVwiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciByZXQgPSA8Ym9vbGVhbj5ldmFsKGV4cHJlc3Npb24pO1xyXG4gICAgLy8gQ2FjaGUgdmFsb3JlXHJcbiAgICB0aGlzLmNhY2hlW2V4cHJlc3Npb25dID0gcmV0O1xyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFV0aWxpenphdG8gZGEgaGFzQUNFeHByZXNzaW9uXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5JZGVudGl0eS5Sb2xlcyAmJiB0aGlzLklkZW50aXR5LlJvbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5JZGVudGl0eS5Sb2xlcy5pbmRleE9mKHJvbGUpICE9IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6emF0byBkYSBoYXNBQ0V4cHJlc3Npb25cclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLklkZW50aXR5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkVsZW1lbnRvIElkZW50aXR5IG5vbiBzcGVjaWZpY2F0byBpbiBBY2Nlc3MgQ29udHJvbC4gR2xpIGFjY2Vzc2kgc2FyYW5ubyB0dXR0aSBsaWJlcmkgZGkgZGVmYXVsdFwiKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zICYmIHRoaXMuSWRlbnRpdHkuUGVybWlzc2lvbnMubGVuZ3RoID4gMCAmJiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zLmluZGV4T2YocGVybWlzc2lvbikgIT0gLTE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVdGlsaXp6YXRvIGRhIGhhc0FDRXhwcmVzc2lvblxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0N1c3RvbSh2YWx1ZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGl0ZW1zID0gdGhpcy50YWdnZWRJdGVtc0NhY2hlLmZpbmQodCA9PiB0LmtleSA9PSB0YWcpPy5pdGVtcztcclxuICAgIGlmICghaXRlbXMpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuICEhaXRlbXMuZmluZCh0ID0+IHQgPT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnkgcG9pbnQgY2hlIGNvbnRyb2xsYSB1bidlc3ByZXNzaW9uZSBpZGVudGlmaWNhbnRlIHVuIHBlcm1lc3NvLCBhZCBlc2VtcGlvIFwiUDp2aXN1YWxpenphemlvbmVcIiBjb250cm9sbGEgY2hlIGwndXRlbnRlIGNvbGxlZ2F0byBhYmJpYSB1biBwZXJtZXNzbyBjaGUgc2kgY2hpYW1hIFwidmlzdWFsaXp6YXppb25lXCJcclxuICAgKi9cclxuICBwdWJsaWMgaGFzKGV4cHI6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQUNFeHByZXNzaW9uKGV4cHIpO1xyXG4gIH1cclxufSJdfQ==
@@ -0,0 +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
+ ContextAwareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", 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: "12.0.0", version: "13.1.1", type: ContextAwareDirective, selector: "[contextAware]", ngImport: i0 });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", 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
@@ -0,0 +1,13 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale
5
+ */
6
+ export class ComponentContext {
7
+ }
8
+ ComponentContext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ComponentContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9
+ ComponentContext.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ComponentContext });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ComponentContext, decorators: [{
11
+ type: Injectable
12
+ }] });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50Q29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvbW9kZWxzL0NvbXBvbmVudENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7O0dBRUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCO2lIQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBUb2tlbiBkYSBpbmlldHRhcmUgcGVyIG9nbmkgc2luZ29sbyBjb21wb25lbnRlIHBlciBjdWkgc2kgdnVvbGUgZGlzYXR0aXZhcmUvYXR0aXZhcmUgbWFzc2l2YW1lbnRlIGRlZ2xpIGlucHV0IGluIG1hbmllcmEgY29udGVzdHVhbGVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbnRleHR7XHJcbiAgICAvKipcclxuICAgICogTm9tZSBkZWwgQ29udGVzdG8gYXNzZWduYXRvIGFsIENvbXBvbmVudGVcclxuICAgICovXHJcbiAgICBuYW1lIDogc3RyaW5nO1xyXG59Il19
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Public API Surface of access-control
3
+ */
4
+ export * from './lib/access-control.module';
5
+ export * from './lib/access-control.service';
6
+ export * from './lib/access-control.directive';
7
+ export * from './lib/context-aware.directive';
8
+ export * from "./lib/models/AccessControlModuleConfig";
9
+ export * from "./lib/AccessControlRouteGuard";
10
+ export * from "./lib/tokens";
11
+ export * from "./lib/models/ComponentContext";
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsZ0NBQWdDLENBQUE7QUFDOUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBhY2Nlc3MtY29udHJvbFxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FjY2Vzcy1jb250cm9sLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FjY2Vzcy1jb250cm9sLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hY2Nlc3MtY29udHJvbC5kaXJlY3RpdmUnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRleHQtYXdhcmUuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9BY2Nlc3NDb250cm9sTW9kdWxlQ29uZmlnXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9BY2Nlc3NDb250cm9sUm91dGVHdWFyZFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvdG9rZW5zXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvQ29tcG9uZW50Q29udGV4dFwiOyJdfQ==