@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.
- package/{esm2020 → esm2022}/esfaenza-access-control.mjs +4 -4
- package/{esm2020 → esm2022}/lib/AccessControlRouteGuard.mjs +102 -102
- package/{esm2020 → esm2022}/lib/access-control.directive.mjs +52 -52
- package/{esm2020 → esm2022}/lib/access-control.module.mjs +30 -30
- package/{esm2020 → esm2022}/lib/access-control.pipe.mjs +31 -31
- package/{esm2020 → esm2022}/lib/access-control.service.mjs +197 -197
- package/{esm2020 → esm2022}/lib/context-aware.directive.mjs +42 -42
- package/{esm2020 → esm2022}/lib/models/AccessControlModuleConfig.mjs +5 -5
- package/{esm2020 → esm2022}/lib/models/ComponentContext.mjs +13 -13
- package/{esm2020 → esm2022}/lib/tokens.mjs +9 -9
- package/{esm2020 → esm2022}/public-api.mjs +12 -12
- package/{fesm2020 → fesm2022}/esfaenza-access-control.mjs +445 -445
- package/fesm2022/esfaenza-access-control.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/AccessControlRouteGuard.d.ts +60 -60
- package/lib/access-control.directive.d.ts +32 -32
- package/lib/access-control.module.d.ts +12 -12
- package/lib/access-control.pipe.d.ts +22 -22
- package/lib/access-control.service.d.ts +84 -84
- package/lib/context-aware.directive.d.ts +22 -22
- package/lib/models/AccessControlModuleConfig.d.ts +13 -13
- package/lib/models/ComponentContext.d.ts +12 -12
- package/lib/tokens.d.ts +9 -9
- package/package.json +8 -14
- package/public-api.d.ts +9 -9
- package/fesm2015/esfaenza-access-control.mjs +0 -478
- package/fesm2015/esfaenza-access-control.mjs.map +0 -1
- package/fesm2020/esfaenza-access-control.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
5
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNmYWVuemEtYWNjZXNzLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvZXNmYWVuemEtYWNjZXNzLWNvbnRyb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe
|
|
3
|
-
* che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:
|
|
4
|
-
*
|
|
5
|
-
* ```typescript
|
|
6
|
-
* @Injectable()
|
|
7
|
-
* export class HasAuthGuardComponent extends BaseRouterGuard {
|
|
8
|
-
* constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {
|
|
9
|
-
* super(ms, acc, router, ts);
|
|
10
|
-
* this.Routes = [
|
|
11
|
-
* { route: "page_route", permission: "P:perm_one" },
|
|
12
|
-
* { route: "*", permission: "R:role_one" }
|
|
13
|
-
* ]
|
|
14
|
-
* }
|
|
15
|
-
* }
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export class AccessControlRouteGuard {
|
|
19
|
-
/**
|
|
20
|
-
* @ignore
|
|
21
|
-
*/
|
|
22
|
-
constructor(msgService, ac, router) {
|
|
23
|
-
this.msgService = msgService;
|
|
24
|
-
this.ac = ac;
|
|
25
|
-
this.router = router;
|
|
26
|
-
/**
|
|
27
|
-
* Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi
|
|
28
|
-
*
|
|
29
|
-
* @default
|
|
30
|
-
*/
|
|
31
|
-
this.LoginRoute = "login";
|
|
32
|
-
/**
|
|
33
|
-
* Permette di specificare delle Route sempre consentite, anche a livello di "Radice". Ad esempio la Root "test" permetterà
|
|
34
|
-
* l'accesso a tutte le route che anche solo iniziano per "test"
|
|
35
|
-
*/
|
|
36
|
-
this.AlwaysAllowedRoots = [];
|
|
37
|
-
/**
|
|
38
|
-
* Lista di Route con la loro espressione di controllo per valutare i permessi
|
|
39
|
-
*/
|
|
40
|
-
this.Routes = [];
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* @ignore
|
|
44
|
-
*/
|
|
45
|
-
canActivateChild(route, _) {
|
|
46
|
-
var url = route.url.join('/');
|
|
47
|
-
//Se l'applicazione non è pronta e non sto navigando nelle pagine consentite
|
|
48
|
-
if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))
|
|
49
|
-
return Promise.resolve(false);
|
|
50
|
-
var routeMatched = false;
|
|
51
|
-
for (let i = 0; i < this.Routes.length; i++) {
|
|
52
|
-
let r = this.Routes[i];
|
|
53
|
-
//Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare
|
|
54
|
-
if (url.indexOf(r.route) != -1) {
|
|
55
|
-
routeMatched = true;
|
|
56
|
-
return this.handleMatch(url, r);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
//Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella
|
|
60
|
-
if (!routeMatched) {
|
|
61
|
-
var wildcardRoute = this.Routes.find(r => r.route == "*");
|
|
62
|
-
if (wildcardRoute)
|
|
63
|
-
return this.handleMatch(url, wildcardRoute);
|
|
64
|
-
else
|
|
65
|
-
console.log("Navigaizone avvenuta su route sconosciuta: " + url);
|
|
66
|
-
}
|
|
67
|
-
return Promise.resolve(true);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* @ignore
|
|
71
|
-
*/
|
|
72
|
-
handleMatch(fromurl, r) {
|
|
73
|
-
let identity = this.ac.Identity;
|
|
74
|
-
if (this.ac.has(r.permission) ||
|
|
75
|
-
(
|
|
76
|
-
// Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente
|
|
77
|
-
// in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci
|
|
78
|
-
// TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve
|
|
79
|
-
this.ac.Initialized &&
|
|
80
|
-
(!identity.Roles || identity.Roles.length == 0) &&
|
|
81
|
-
(!identity.Permissions || identity.Permissions.length == 0)))
|
|
82
|
-
return Promise.resolve(true);
|
|
83
|
-
else {
|
|
84
|
-
//Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione
|
|
85
|
-
//Se ho aperto una nuova tab invece rispedisco al login
|
|
86
|
-
if (window.history.length > 2 && this.ac.isLoggedIn()) {
|
|
87
|
-
this.msgService.simpleError("Page Unauthorized");
|
|
88
|
-
return Promise.resolve(false);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
this.onRedirectInProgress();
|
|
92
|
-
this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Callback che viene eseguito prima che la Guard reindirizzi al login
|
|
98
|
-
*/
|
|
99
|
-
onRedirectInProgress() {
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/**
|
|
2
|
+
* Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe
|
|
3
|
+
* che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:
|
|
4
|
+
*
|
|
5
|
+
* ```typescript
|
|
6
|
+
* @Injectable()
|
|
7
|
+
* export class HasAuthGuardComponent extends BaseRouterGuard {
|
|
8
|
+
* constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {
|
|
9
|
+
* super(ms, acc, router, ts);
|
|
10
|
+
* this.Routes = [
|
|
11
|
+
* { route: "page_route", permission: "P:perm_one" },
|
|
12
|
+
* { route: "*", permission: "R:role_one" }
|
|
13
|
+
* ]
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class AccessControlRouteGuard {
|
|
19
|
+
/**
|
|
20
|
+
* @ignore
|
|
21
|
+
*/
|
|
22
|
+
constructor(msgService, ac, router) {
|
|
23
|
+
this.msgService = msgService;
|
|
24
|
+
this.ac = ac;
|
|
25
|
+
this.router = router;
|
|
26
|
+
/**
|
|
27
|
+
* Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi
|
|
28
|
+
*
|
|
29
|
+
* @default
|
|
30
|
+
*/
|
|
31
|
+
this.LoginRoute = "login";
|
|
32
|
+
/**
|
|
33
|
+
* Permette di specificare delle Route sempre consentite, anche a livello di "Radice". Ad esempio la Root "test" permetterà
|
|
34
|
+
* l'accesso a tutte le route che anche solo iniziano per "test"
|
|
35
|
+
*/
|
|
36
|
+
this.AlwaysAllowedRoots = [];
|
|
37
|
+
/**
|
|
38
|
+
* Lista di Route con la loro espressione di controllo per valutare i permessi
|
|
39
|
+
*/
|
|
40
|
+
this.Routes = [];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @ignore
|
|
44
|
+
*/
|
|
45
|
+
canActivateChild(route, _) {
|
|
46
|
+
var url = route.url.join('/');
|
|
47
|
+
//Se l'applicazione non è pronta e non sto navigando nelle pagine consentite
|
|
48
|
+
if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))
|
|
49
|
+
return Promise.resolve(false);
|
|
50
|
+
var routeMatched = false;
|
|
51
|
+
for (let i = 0; i < this.Routes.length; i++) {
|
|
52
|
+
let r = this.Routes[i];
|
|
53
|
+
//Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare
|
|
54
|
+
if (url.indexOf(r.route) != -1) {
|
|
55
|
+
routeMatched = true;
|
|
56
|
+
return this.handleMatch(url, r);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella
|
|
60
|
+
if (!routeMatched) {
|
|
61
|
+
var wildcardRoute = this.Routes.find(r => r.route == "*");
|
|
62
|
+
if (wildcardRoute)
|
|
63
|
+
return this.handleMatch(url, wildcardRoute);
|
|
64
|
+
else
|
|
65
|
+
console.log("Navigaizone avvenuta su route sconosciuta: " + url);
|
|
66
|
+
}
|
|
67
|
+
return Promise.resolve(true);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @ignore
|
|
71
|
+
*/
|
|
72
|
+
handleMatch(fromurl, r) {
|
|
73
|
+
let identity = this.ac.Identity;
|
|
74
|
+
if (this.ac.has(r.permission) ||
|
|
75
|
+
(
|
|
76
|
+
// Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente
|
|
77
|
+
// in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci
|
|
78
|
+
// TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve
|
|
79
|
+
this.ac.Initialized &&
|
|
80
|
+
(!identity.Roles || identity.Roles.length == 0) &&
|
|
81
|
+
(!identity.Permissions || identity.Permissions.length == 0)))
|
|
82
|
+
return Promise.resolve(true);
|
|
83
|
+
else {
|
|
84
|
+
//Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione
|
|
85
|
+
//Se ho aperto una nuova tab invece rispedisco al login
|
|
86
|
+
if (window.history.length > 2 && this.ac.isLoggedIn()) {
|
|
87
|
+
this.msgService.simpleError("Page Unauthorized");
|
|
88
|
+
return Promise.resolve(false);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.onRedirectInProgress();
|
|
92
|
+
this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Callback che viene eseguito prima che la Guard reindirizzi al login
|
|
98
|
+
*/
|
|
99
|
+
onRedirectInProgress() {
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzQ29udHJvbFJvdXRlR3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2Nlc3MtY29udHJvbC9zcmMvbGliL0FjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxPQUFPLHVCQUF1QjtJQW9CaEM7O09BRUc7SUFDSCxZQUFvQixVQUEyQixFQUFVLEVBQXdCLEVBQVUsTUFBYztRQUFyRixlQUFVLEdBQVYsVUFBVSxDQUFpQjtRQUFVLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXJCekc7Ozs7V0FJRztRQUNPLGVBQVUsR0FBWSxPQUFPLENBQUM7UUFFeEM7OztXQUdHO1FBQ08sdUJBQWtCLEdBQWEsRUFBRSxDQUFDO1FBRTVDOztXQUVHO1FBQ08sV0FBTSxHQUEwQyxFQUFFLENBQUM7SUFNN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBNkIsRUFBRSxDQUFzQjtRQUNsRSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5Qiw0RUFBNEU7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksWUFBWSxHQUFZLEtBQUssQ0FBQztRQUNsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QiwySEFBMkg7WUFDM0gsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDNUIsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNuQztTQUNKO1FBQ0QsNkZBQTZGO1FBQzdGLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7WUFDMUQsSUFBSSxhQUFhO2dCQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7O2dCQUU1QyxPQUFPLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxPQUFlLEVBQUUsQ0FBTTtRQUN2QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUVoQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDekI7WUFDSSx3SEFBd0g7WUFDeEgsOEZBQThGO1lBQzlGLDBGQUEwRjtZQUMxRixJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVc7Z0JBQ25CLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQzlEO1lBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsNEVBQTRFO1lBQzVFLHVEQUF1RDtZQUN2RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNqRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDakU7U0FDSjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLG9CQUFvQjtJQUM5QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvL0FuZ3VsYXJcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLy9MaWJzXHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vL01vZGVsc1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gJy4vYWNjZXNzLWNvbnRyb2wuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogUm91dGVyIEd1YXJkIGJhc2UgcGVyIHByb3RlZ2dlcmUgbCdhY2Nlc3NvIGFsbGUgcm91dGUgZGVsbCdhcHBsaWNhemlvbmUuIFBlciB1dGlsaXp6YXJsYSDDqCBzdWZmaWNpZW50ZSBlcmVkaXRhcmxhIGUsIG5lbCBjb3N0cnV0dG9yZSBkZWxsYSBjbGFzc2VcclxuICogY2hlIGxhIGVyZWRpdGF2YWxvcml6emFyZSBsYSB2YXJpYWJpbGUgUm91dGVzIGNvbiBsZSByb3V0ZSBwZXJtZXNzZSBkYWwgbW9kdWxvIGUgaWwgcGVybWVzc28gcGVyIGN1aSBzaSB2dW9sZSByaXNlcnZhcmUgbCdhY2Nlc3NvLiBBZCBlc2VtcGlvOlxyXG4gKiBcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBASW5qZWN0YWJsZSgpXHJcbiAqIGV4cG9ydCBjbGFzcyBIYXNBdXRoR3VhcmRDb21wb25lbnQgZXh0ZW5kcyBCYXNlUm91dGVyR3VhcmQge1xyXG4gKiAgICAgIGNvbnN0cnVjdG9yKGFjYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIHJvdXRlcjogUm91dGVyLCBtczogTWVzc2FnZVNlcnZpY2UsIHRzOiBCYXNlVG9rZW5TZXJ2aWNlKSB7XHJcbiAqICAgICAgICAgIHN1cGVyKG1zLCBhY2MsIHJvdXRlciwgdHMpO1xyXG4gKiAgICAgICAgICB0aGlzLlJvdXRlcyA9IFtcclxuICogICAgICAgICAgICAgIHsgcm91dGU6IFwicGFnZV9yb3V0ZVwiLCBwZXJtaXNzaW9uOiBcIlA6cGVybV9vbmVcIiB9LFxyXG4gKiAgICAgICAgICAgICAgeyByb3V0ZTogXCIqXCIsIHBlcm1pc3Npb246IFwiUjpyb2xlX29uZVwiIH1cclxuICogICAgICAgICAgXVxyXG4gKiAgICAgIH1cclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sUm91dGVHdWFyZCAge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm91dGUgZGkgbG9naW4gY2hlIHNlcnZlIHBlciByZWluZGlyaXp6YXJlIGFsbGEgcGFnaW5hIGRpIGxvZ2luIGluIGNhc28gZGkgZmFsbGltZW50byBkZWwgY29udHJvbGxvIHN1aSBQZXJtZXNzaVxyXG4gICAgICogXHJcbiAgICAgKiBAZGVmYXVsdFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgTG9naW5Sb3V0ZSA6IHN0cmluZyA9IFwibG9naW5cIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIHNwZWNpZmljYXJlIGRlbGxlIFJvdXRlIHNlbXByZSBjb25zZW50aXRlLCBhbmNoZSBhIGxpdmVsbG8gZGkgXCJSYWRpY2VcIi4gQWQgZXNlbXBpbyBsYSBSb290IFwidGVzdFwiIHBlcm1ldHRlcsOgXHJcbiAgICAgKiBsJ2FjY2Vzc28gYSB0dXR0ZSBsZSByb3V0ZSBjaGUgYW5jaGUgc29sbyBpbml6aWFubyBwZXIgXCJ0ZXN0XCJcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIEFsd2F5c0FsbG93ZWRSb290czogc3RyaW5nW10gPSBbXTtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0YSBkaSBSb3V0ZSBjb24gbGEgbG9ybyBlc3ByZXNzaW9uZSBkaSBjb250cm9sbG8gcGVyIHZhbHV0YXJlIGkgcGVybWVzc2lcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIFJvdXRlczogeyByb3V0ZTogYW55OyBwZXJtaXNzaW9uOiBzdHJpbmc7IH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1zZ1NlcnZpY2UgOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY2FuQWN0aXZhdGVDaGlsZChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgXzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHZhciB1cmwgPSByb3V0ZS51cmwuam9pbignLycpO1xyXG4gICAgICAgIC8vU2UgbCdhcHBsaWNhemlvbmUgbm9uIMOoIHByb250YSBlIG5vbiBzdG8gbmF2aWdhbmRvIG5lbGxlIHBhZ2luZSBjb25zZW50aXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLmFjLkluaXRpYWxpemVkICYmICF0aGlzLkFsd2F5c0FsbG93ZWRSb290cy5maW5kKHIgPT4gdXJsLmluZGV4T2YocikgIT0gLTEpKVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIHJvdXRlTWF0Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5Sb3V0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHIgPSB0aGlzLlJvdXRlc1tpXTtcclxuICAgICAgICAgICAgLy9TZSBmYWNjaW8gbWF0Y2ggY29uIGxhIHJvdXRlIHNpZ25pZmljYSBjaGUgaG8gbmF2aWdhdG8gaW4gdW5hIGRlbGxlIHJvdXRlIGNvbm9zY2l1dGUsIGFsdHJpbWVudGkgYXZ2ZXJ0byBtYSBsYXNjaW8gYW5kYXJlXHJcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZihyLnJvdXRlKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcm91dGVNYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZU1hdGNoKHVybCwgcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy9TZSBub24gZmFjY2lvIG5lc3N1biBtYXRjaCBtYSBobyB1bmEgcm91dGUgd2lsZGNhcmQgKCopIHByZW5kbyBxdWVsbGEgZSBjb250cm9sbG8gc3UgcXVlbGxhXHJcbiAgICAgICAgaWYgKCFyb3V0ZU1hdGNoZWQpIHtcclxuICAgICAgICAgICAgdmFyIHdpbGRjYXJkUm91dGUgPSB0aGlzLlJvdXRlcy5maW5kKHIgPT4gci5yb3V0ZSA9PSBcIipcIik7XHJcbiAgICAgICAgICAgIGlmICh3aWxkY2FyZFJvdXRlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTWF0Y2godXJsLCB3aWxkY2FyZFJvdXRlKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOYXZpZ2Fpem9uZSBhdnZlbnV0YSBzdSByb3V0ZSBzY29ub3NjaXV0YTogXCIgKyB1cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZU1hdGNoKGZyb211cmw6IHN0cmluZywgcjogYW55KSB7XHJcbiAgICAgICAgbGV0IGlkZW50aXR5ID0gdGhpcy5hYy5JZGVudGl0eTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWMuaGFzKHIucGVybWlzc2lvbikgfHxcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgLy8gQ29uc2lkZXJvIGFuY2hlIGxhIHBvc3NpYmlsaXTDoCBkaSBhdmVyZSBsJ2FjY2VzcyBjb250cm9sIGluaXppYWxpenphdG8gbWEgY2hlIGwnYWNjb3VudCBzY29wZSBub24gc2lhIGFuY29yYSBwcmVzZW50ZVxyXG4gICAgICAgICAgICAgICAgLy8gaW4gcXVlc3RvIGNhc28gc3VwcG9uZ28gc2lhIHVuIGhhcmQgcmVmcmVzaCBlIG1pIGZpZG8gZGVsIGZhdHRvIGNoZSBsJ3V0ZW50ZSBwb3NzYSBlbnRyYXJjaVxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogRml4YXJlIG1lZ2xpbyBjb25jYXRlbmFuZG8gdW5hIHByb21pc2UgY2hlIHZhIGEgcHJlbmRlcmUgbCdhY2NvdW50IHNjb3BlIHNlIHNlcnZlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjLkluaXRpYWxpemVkICYmXHJcbiAgICAgICAgICAgICAgICAoIWlkZW50aXR5LlJvbGVzIHx8IGlkZW50aXR5LlJvbGVzLmxlbmd0aCA9PSAwKSAmJlxyXG4gICAgICAgICAgICAgICAgKCFpZGVudGl0eS5QZXJtaXNzaW9ucyB8fCBpZGVudGl0eS5QZXJtaXNzaW9ucy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy9TZSBzb25vIG5lbCBzaXRvIG9yaWdpbmFsZSAobm9uIGhvIGFwZXJ0byB1biBuZXd0YWIpIGJsb2NjbyBsYSBuYXZpZ2F6aW9uZVxyXG4gICAgICAgICAgICAvL1NlIGhvIGFwZXJ0byB1bmEgbnVvdmEgdGFiIGludmVjZSByaXNwZWRpc2NvIGFsIGxvZ2luXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaGlzdG9yeS5sZW5ndGggPiAyICYmIHRoaXMuYWMuaXNMb2dnZWRJbigpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2Uuc2ltcGxlRXJyb3IoXCJQYWdlIFVuYXV0aG9yaXplZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJlZGlyZWN0SW5Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuTG9naW5Sb3V0ZSwgeyBmcm9tVXJsOiBmcm9tdXJsIH1dKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGNoZSB2aWVuZSBlc2VndWl0byBwcmltYSBjaGUgbGEgR3VhcmQgcmVpbmRpcml6emkgYWwgbG9naW5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uUmVkaXJlY3RJblByb2dyZXNzKCkge1xyXG4gICAgfVxyXG59Il19
|
|
@@ -1,52 +1,52 @@
|
|
|
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
|
-
* Espressione da processare scritta come {Chiave}:{Valore}
|
|
22
|
-
*
|
|
23
|
-
* Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions.
|
|
24
|
-
*
|
|
25
|
-
* Nelle ultime versioni del template è anche presente di default la custom permission "X" che indica se l'applicaizone è Esterna o no
|
|
26
|
-
*/
|
|
27
|
-
this.ac = null;
|
|
28
|
-
/** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */
|
|
29
|
-
this.acAbsolute = false;
|
|
30
|
-
}
|
|
31
|
-
ngOnInit() {
|
|
32
|
-
var allow = this._ac.has(this.ac, this.acAbsolute);
|
|
33
|
-
//Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template
|
|
34
|
-
if (allow)
|
|
35
|
-
this.viewContainer.createEmbeddedView(this.templateRef);
|
|
36
|
-
else
|
|
37
|
-
this.viewContainer.clear();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
43
|
-
type: Directive,
|
|
44
|
-
args: [{
|
|
45
|
-
selector: '[ac]',
|
|
46
|
-
}]
|
|
47
|
-
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.AccessControlService }]; }, propDecorators: { ac: [{
|
|
48
|
-
type: Input
|
|
49
|
-
}], acAbsolute: [{
|
|
50
|
-
type: Input
|
|
51
|
-
}] } });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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
|
+
* Espressione da processare scritta come {Chiave}:{Valore}
|
|
22
|
+
*
|
|
23
|
+
* Le {Chiave} disponibili sono di default "R" per i ruoli e "P" per i permessi. È possibile espanderle con le Custom Permissions.
|
|
24
|
+
*
|
|
25
|
+
* Nelle ultime versioni del template è anche presente di default la custom permission "X" che indica se l'applicaizone è Esterna o no
|
|
26
|
+
*/
|
|
27
|
+
this.ac = null;
|
|
28
|
+
/** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */
|
|
29
|
+
this.acAbsolute = false;
|
|
30
|
+
}
|
|
31
|
+
ngOnInit() {
|
|
32
|
+
var allow = this._ac.has(this.ac, this.acAbsolute);
|
|
33
|
+
//Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template
|
|
34
|
+
if (allow)
|
|
35
|
+
this.viewContainer.createEmbeddedView(this.templateRef);
|
|
36
|
+
else
|
|
37
|
+
this.viewContainer.clear();
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.AccessControlService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
40
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: AccessControlDirective, selector: "[ac]", inputs: { ac: "ac", acAbsolute: "acAbsolute" }, ngImport: i0 }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlDirective, decorators: [{
|
|
43
|
+
type: Directive,
|
|
44
|
+
args: [{
|
|
45
|
+
selector: '[ac]',
|
|
46
|
+
}]
|
|
47
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.AccessControlService }]; }, propDecorators: { ac: [{
|
|
48
|
+
type: Input
|
|
49
|
+
}], acAbsolute: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}] } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNjZXNzLWNvbnRyb2wvc3JjL2xpYi9hY2Nlc3MtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFpQyxNQUFNLGVBQWUsQ0FBQzs7O0FBS2hGOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sc0JBQXNCO0lBYy9COzs7O09BSUc7SUFDSCxZQUFvQixXQUE2QixFQUFVLGFBQStCLEVBQVUsR0FBeUI7UUFBekcsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBc0I7UUFqQjdIOzs7Ozs7V0FNRztRQUNNLE9BQUUsR0FBWSxJQUFJLENBQUM7UUFFNUIsbUpBQW1KO1FBQzFJLGVBQVUsR0FBWSxLQUFLLENBQUM7SUFPNEYsQ0FBQztJQUdsSSxRQUFRO1FBQ0osSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbkQscUZBQXFGO1FBRXJGLElBQUksS0FBSztZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztZQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BDLENBQUM7K0dBN0JRLHNCQUFzQjttR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUhsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxNQUFNO2lCQUNuQjtvS0FVWSxFQUFFO3NCQUFWLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tIFwiLi9hY2Nlc3MtY29udHJvbC5zZXJ2aWNlXCI7XHJcblxyXG4vKipcclxuICogRGlyZXR0aXZhIGNoZSBwZXJtZXR0ZSBkaSBnZXN0aXJlIGlsIGNvbnRyb2xsbyBhY2Nlc3NpIHN1IGNvbXBvbmVudGkgSFRNTC4gXHJcbiAqIFxyXG4gKiBQZXIgZ2xpIGVzZW1waSBkaSB1dGlsaXp6byBmYXJlIHJpZmVyaW1lbnRvIGFsIFJFQURNRS5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbYWNdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xEaXJlY3RpdmUge1xyXG4gICAgXHJcbiAgICAvKiogXHJcbiAgICAgKiBFc3ByZXNzaW9uZSBkYSBwcm9jZXNzYXJlIHNjcml0dGEgY29tZSB7Q2hpYXZlfTp7VmFsb3JlfVxyXG4gICAgICogXHJcbiAgICAgKiBMZSB7Q2hpYXZlfSBkaXNwb25pYmlsaSBzb25vIGRpIGRlZmF1bHQgXCJSXCIgcGVyIGkgcnVvbGkgZSBcIlBcIiBwZXIgaSBwZXJtZXNzaS4gw4ggcG9zc2liaWxlIGVzcGFuZGVybGUgY29uIGxlIEN1c3RvbSBQZXJtaXNzaW9ucy5cclxuICAgICAqIFxyXG4gICAgICogTmVsbGUgdWx0aW1lIHZlcnNpb25pIGRlbCB0ZW1wbGF0ZSDDqCBhbmNoZSBwcmVzZW50ZSBkaSBkZWZhdWx0IGxhIGN1c3RvbSBwZXJtaXNzaW9uIFwiWFwiIGNoZSBpbmRpY2Egc2UgbCdhcHBsaWNhaXpvbmUgw6ggRXN0ZXJuYSBvIG5vXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGFjIDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICAvKiogSW5kaWNhIGNoZSBsJ2VzcG9yZXNzaW9uZSAqKmFjKiogw6ggYXNzb2x1dGEsIGNpb8OoIGNoZSBub24gcHXDsiBlc3NlcmUgbW9kaWZpY2F0YSBpbnRlcm5hbWVudGUgYWQgZXNlbXBpbyBwZXIgYWdnaXVuZ2VyZSBjb25kaXppb25pIGRpIGRlZmF1bHQgKi9cclxuICAgIEBJbnB1dCgpIGFjQWJzb2x1dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBfYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlKSB7IH1cclxuXHJcblxyXG4gICAgbmdPbkluaXQoKXtcclxuICAgICAgICB2YXIgYWxsb3cgPSB0aGlzLl9hYy5oYXModGhpcy5hYywgdGhpcy5hY0Fic29sdXRlKTtcclxuXHJcbiAgICAgICAgLy9TZSBobyBpIHBlcm1lc3NpLCBwcm9zZWd1byBjcmVhbmRvIGxhIHZpc3RhIG5lbCBET00sIGFsdHJpbWVudGkgcmltdW92byBpbCB0ZW1wbGF0ZVxyXG5cclxuICAgICAgICBpZiAoYWxsb3cpIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcbiAgICAgICAgZWxzZSB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbn0iXX0=
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { ACC_CUSTOMKEY, ACC_DEBUG_MODE, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';
|
|
3
|
-
import { AccessControlDirective } from './access-control.directive';
|
|
4
|
-
import { ContextAwareDirective } from './context-aware.directive';
|
|
5
|
-
import { AccessControlPipe } from './access-control.pipe';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class AccessControlModule {
|
|
8
|
-
static forRoot(config) {
|
|
9
|
-
return {
|
|
10
|
-
ngModule: AccessControlModule,
|
|
11
|
-
providers: [
|
|
12
|
-
{ provide: ACC_CUSTOMKEY, useValue: config?.contextAwareKey || null },
|
|
13
|
-
{ provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },
|
|
14
|
-
{ provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' },
|
|
15
|
-
{ provide: ACC_DEBUG_MODE, useValue: config?.debugMode || false },
|
|
16
|
-
]
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
24
|
-
type: NgModule,
|
|
25
|
-
args: [{
|
|
26
|
-
declarations: [AccessControlDirective, ContextAwareDirective, AccessControlPipe],
|
|
27
|
-
exports: [AccessControlDirective, ContextAwareDirective, AccessControlPipe]
|
|
28
|
-
}]
|
|
29
|
-
}] });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { ACC_CUSTOMKEY, ACC_DEBUG_MODE, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';
|
|
3
|
+
import { AccessControlDirective } from './access-control.directive';
|
|
4
|
+
import { ContextAwareDirective } from './context-aware.directive';
|
|
5
|
+
import { AccessControlPipe } from './access-control.pipe';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class AccessControlModule {
|
|
8
|
+
static forRoot(config) {
|
|
9
|
+
return {
|
|
10
|
+
ngModule: AccessControlModule,
|
|
11
|
+
providers: [
|
|
12
|
+
{ provide: ACC_CUSTOMKEY, useValue: config?.contextAwareKey || null },
|
|
13
|
+
{ provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },
|
|
14
|
+
{ provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' },
|
|
15
|
+
{ provide: ACC_DEBUG_MODE, useValue: config?.debugMode || false },
|
|
16
|
+
]
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
20
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AccessControlModule, declarations: [AccessControlDirective, ContextAwareDirective, AccessControlPipe], exports: [AccessControlDirective, ContextAwareDirective, AccessControlPipe] }); }
|
|
21
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlModule }); }
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlModule, decorators: [{
|
|
24
|
+
type: NgModule,
|
|
25
|
+
args: [{
|
|
26
|
+
declarations: [AccessControlDirective, ContextAwareDirective, AccessControlPipe],
|
|
27
|
+
exports: [AccessControlDirective, ContextAwareDirective, AccessControlPipe]
|
|
28
|
+
}]
|
|
29
|
+
}] });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNjZXNzLWNvbnRyb2wvc3JjL2xpYi9hY2Nlc3MtY29udHJvbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUd4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNMUQsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWtDO1FBQy9DLE9BQU87WUFDTCxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLFNBQVMsRUFBRTtnQkFDVCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxlQUFlLElBQUksSUFBSSxFQUFFO2dCQUNyRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLCtCQUErQixJQUFJLElBQUksRUFBRTtnQkFDdkYsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLEtBQUssRUFBRTthQUNsRTtTQUNGLENBQUM7SUFDSixDQUFDOytHQVhVLG1CQUFtQjtnSEFBbkIsbUJBQW1CLGlCQUhmLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixhQUN0RSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUI7Z0hBRTlELG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFKL0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQztvQkFDaEYsT0FBTyxFQUFDLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLENBQUM7aUJBQzNFIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBBQ0NfQ1VTVE9NS0VZLCBBQ0NfREVCVUdfTU9ERSwgQUNDX0RFRl9DT05ELCBBQ0NfREVGX0NPTkRfT1AgfSBmcm9tICcuL3Rva2Vucyc7XHJcblxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvQWNjZXNzQ29udHJvbE1vZHVsZUNvbmZpZyc7XHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2FjY2Vzcy1jb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRleHRBd2FyZURpcmVjdGl2ZSB9IGZyb20gJy4vY29udGV4dC1hd2FyZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sUGlwZSB9IGZyb20gJy4vYWNjZXNzLWNvbnRyb2wucGlwZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW0FjY2Vzc0NvbnRyb2xEaXJlY3RpdmUsIENvbnRleHRBd2FyZURpcmVjdGl2ZSwgQWNjZXNzQ29udHJvbFBpcGVdLFxyXG4gIGV4cG9ydHM6W0FjY2Vzc0NvbnRyb2xEaXJlY3RpdmUsIENvbnRleHRBd2FyZURpcmVjdGl2ZSwgQWNjZXNzQ29udHJvbFBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sTW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdChjb25maWc/OiBBY2Nlc3NDb250cm9sTW9kdWxlQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBY2Nlc3NDb250cm9sTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogQWNjZXNzQ29udHJvbE1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBBQ0NfQ1VTVE9NS0VZLCB1c2VWYWx1ZTogY29uZmlnPy5jb250ZXh0QXdhcmVLZXkgfHwgbnVsbCB9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogQUNDX0RFRl9DT05ELCB1c2VWYWx1ZTogY29uZmlnPy5kZWZhdWx0Q29uZGl0aW9uIHx8IG51bGwgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEFDQ19ERUZfQ09ORF9PUCwgdXNlVmFsdWU6IGNvbmZpZz8uZGVmYXVsdENvbmRpdGlvbkxvZ2ljYWxPcGVyYXRvciB8fCAnfHwnIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBBQ0NfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZz8uZGVidWdNb2RlIHx8IGZhbHNlIH0sXHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59Il19
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { Pipe } from "@angular/core";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./access-control.service";
|
|
5
|
-
/**
|
|
6
|
-
* Pipe che restituisce **true** quando il controllo sugli accessi ha successo, false altrimenti
|
|
7
|
-
*
|
|
8
|
-
* Per gli esempi di utilizzo fare riferimento al README.
|
|
9
|
-
*/
|
|
10
|
-
export class AccessControlPipe {
|
|
11
|
-
/** @ignore Costruttore */
|
|
12
|
-
constructor(_ac) {
|
|
13
|
-
this._ac = _ac;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Trasforma l'espressione ac in un booleano
|
|
17
|
-
* @param value Espressione ac
|
|
18
|
-
* @param absolute Indica se valutare **ac** in maniera assoluta o meno
|
|
19
|
-
* @returns **true** se la condizione è verificata, **false** altrimenti
|
|
20
|
-
*/
|
|
21
|
-
transform(value, absolute) {
|
|
22
|
-
return this._ac.has(value, absolute);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
28
|
-
type: Pipe,
|
|
29
|
-
args: [{ name: 'ac' }]
|
|
30
|
-
}], ctorParameters: function () { return [{ type: i1.AccessControlService }]; } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
// Angular
|
|
2
|
+
import { Pipe } from "@angular/core";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./access-control.service";
|
|
5
|
+
/**
|
|
6
|
+
* Pipe che restituisce **true** quando il controllo sugli accessi ha successo, false altrimenti
|
|
7
|
+
*
|
|
8
|
+
* Per gli esempi di utilizzo fare riferimento al README.
|
|
9
|
+
*/
|
|
10
|
+
export class AccessControlPipe {
|
|
11
|
+
/** @ignore Costruttore */
|
|
12
|
+
constructor(_ac) {
|
|
13
|
+
this._ac = _ac;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Trasforma l'espressione ac in un booleano
|
|
17
|
+
* @param value Espressione ac
|
|
18
|
+
* @param absolute Indica se valutare **ac** in maniera assoluta o meno
|
|
19
|
+
* @returns **true** se la condizione è verificata, **false** altrimenti
|
|
20
|
+
*/
|
|
21
|
+
transform(value, absolute) {
|
|
22
|
+
return this._ac.has(value, absolute);
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlPipe, deps: [{ token: i1.AccessControlService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
25
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AccessControlPipe, name: "ac" }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlPipe, decorators: [{
|
|
28
|
+
type: Pipe,
|
|
29
|
+
args: [{ name: 'ac' }]
|
|
30
|
+
}], ctorParameters: function () { return [{ type: i1.AccessControlService }]; } });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvYWNjZXNzLWNvbnRyb2wucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQUtwRDs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUcxQiwwQkFBMEI7SUFDMUIsWUFBb0IsR0FBeUI7UUFBekIsUUFBRyxHQUFILEdBQUcsQ0FBc0I7SUFBSSxDQUFDO0lBRWxEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEtBQWEsRUFBRSxRQUFrQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDOytHQWRRLGlCQUFpQjs2R0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gXCIuL2FjY2Vzcy1jb250cm9sLnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBQaXBlIGNoZSByZXN0aXR1aXNjZSAqKnRydWUqKiBxdWFuZG8gaWwgY29udHJvbGxvIHN1Z2xpIGFjY2Vzc2kgaGEgc3VjY2Vzc28sIGZhbHNlIGFsdHJpbWVudGkgXHJcbiAqIFxyXG4gKiBQZXIgZ2xpIGVzZW1waSBkaSB1dGlsaXp6byBmYXJlIHJpZmVyaW1lbnRvIGFsIFJFQURNRS5cclxuICovXHJcbkBQaXBlKHsgbmFtZTogJ2FjJyB9KVxyXG5leHBvcnQgY2xhc3MgQWNjZXNzQ29udHJvbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuXHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjOiBBY2Nlc3NDb250cm9sU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWEgbCdlc3ByZXNzaW9uZSBhYyBpbiB1biBib29sZWFub1xyXG4gICAgICogQHBhcmFtIHZhbHVlIEVzcHJlc3Npb25lIGFjXHJcbiAgICAgKiBAcGFyYW0gYWJzb2x1dGUgSW5kaWNhIHNlIHZhbHV0YXJlICoqYWMqKiBpbiBtYW5pZXJhIGFzc29sdXRhIG8gbWVub1xyXG4gICAgICogQHJldHVybnMgKip0cnVlKiogc2UgbGEgY29uZGl6aW9uZSDDqCB2ZXJpZmljYXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgYWJzb2x1dGU/OiBib29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjLmhhcyh2YWx1ZSwgYWJzb2x1dGUpO1xyXG4gICAgfVxyXG59Il19
|