@esfaenza/access-control 15.2.9 → 15.2.10

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.
@@ -81,14 +81,13 @@ export class AccessControlService {
81
81
  // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo
82
82
  if (splits[0] == "R" || splits[0] == "!R") {
83
83
  if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
84
- debugger;
85
84
  let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
86
85
  var matches2 = tmpReplace.match(RolesPermissionsRegexp);
87
86
  matches2.forEach(t2 => {
88
87
  var splits2 = t2.split(':');
89
- if (splits2[0] == "R")
88
+ if (splits2[0] == "R" || splits2[0] == "!R")
90
89
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
91
- else if (splits2[0] == "P")
90
+ else if (splits2[0] == "P" || splits2[0] == "!P")
92
91
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
93
92
  else
94
93
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
@@ -100,14 +99,13 @@ export class AccessControlService {
100
99
  }
101
100
  else if (splits[0] == "P" || splits[0] == "!P") {
102
101
  if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
103
- debugger;
104
102
  let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
105
103
  var matches2 = tmpReplace.match(RolesPermissionsRegexp);
106
104
  matches2.forEach(t2 => {
107
105
  var splits2 = t2.split(':');
108
- if (splits2[0] == "R")
106
+ if (splits2[0] == "R" || splits2[0] == "!R")
109
107
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
110
- else if (splits2[0] == "P")
108
+ else if (splits2[0] == "P" || splits2[0] == "!P")
111
109
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
112
110
  else
113
111
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
@@ -186,4 +184,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
186
184
  type: Inject,
187
185
  args: [ACC_DEF_COND_OP]
188
186
  }] }]; } });
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUV6RDs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUF1Qi9CLGNBQWM7SUFDZCxZQUFzRCxZQUFvQixFQUErQyxlQUF1QjtRQUExRixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUErQyxvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQXRCaEo7O1dBRUc7UUFDSSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUVwQzs7V0FFRztRQUNJLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUUxQyxjQUFjO1FBQ04sVUFBSyxHQUFPLEVBQUUsQ0FBQztRQUV2QixjQUFjO1FBQ04scUJBQWdCLEdBQXVDLEVBQUUsQ0FBQztJQVFtRixDQUFDO0lBRXRKOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxRQUFvRDtRQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDJCQUEyQixDQUFDLGlCQUFxRDtRQUN0RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pELElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZD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QUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O2lIQTdMVSxvQkFBb0Isa0JBd0JDLFlBQVksNkJBQW9ELGVBQWU7cUhBeEJwRyxvQkFBb0IsY0FEUixNQUFNOzJGQUNsQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkF5QmpCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsWUFBWTs7MEJBQWlDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFDQ19ERUZfQ09ORCwgQUNDX0RFRl9DT05EX09QIH0gZnJvbSBcIi4vdG9rZW5zXCI7XHJcblxyXG4vKipcclxuICogRW50cnlwb2ludCBkaSB0dXR0ZSBsZSBvcGVyYXppb25pIGVzcG9zdGUgZGFsbGEgbGlicmVyaWEgYWNjZXNzLWNvbnRyb2xcclxuICovXHJcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiBcInJvb3RcIn0pXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBsJ0lkZW50aXR5IMOoIHN0YXRhIGluaXppYWxpenphdGFcclxuICAgKi9cclxuICBwdWJsaWMgSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIHNvbm8gc3RhdGUgZWZmZXR0dWF0ZSBpbml6aWFsaXp6YXppb25pIGRpIEN1c3RvbSBQZXJtaXNzaW9uc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJbml0aWFsaXplZEN1c3RvbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgY2FjaGU6IHt9ID0ge307XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSB0YWdnZWRJdGVtc0NhY2hlOiB7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElkZW50aXR5IGFzc29jaWF0YSBhIHF1ZXN0J2lzdGFuemEgZGVsIFNlcnZpemlvIEFjY2VzcyBDb250cm9sLCB1dGlsZSBzZSBzaSB2dW9sZSBhdmVyZSBhY2Nlc3NvIGEgUnVvbGkgZSBQZXJtZXNzaSBkaXJldHRhbWVudGUgZGEgcXVpLCBwZXIgcXVhbHNpdm9nbGlhIG1vdGl2b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9O1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0RFRl9DT05EKSBwcml2YXRlIEFDQ19ERUZfQ09ORDogc3RyaW5nLCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDQ19ERUZfQ09ORF9PUCkgcHJpdmF0ZSBBQ0NfREVGX0NPTkRfT1A6IHN0cmluZywpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml6aWFsaXp6YSBsJ0lkZW50aXR5IGRlbCBzZXJ2aXppbyBjb24gaWwgbW9kZWxsbyBzcGVjaWZpY2F0b1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbXMge3sgUm9sZXM6IHN0cmluZ1tdLCBQZXJtaXNzaW9uczogc3RyaW5nW10gfX0gaWRlbnRpdHkgSWRlbnRpdMOgIGFwcGxpY2F0aXZhIGNvbiBydW9saSBlIHBlcm1lc3NpXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRpYWxpemVJZGVudGl0eShpZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9KSB7XHJcbiAgICB0aGlzLklkZW50aXR5ID0gaWRlbnRpdHk7XHJcbiAgICB0aGlzLkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXppYWxpenphIGkgcGVybWVzc2kgQ3VzdG9tIGRlbCBzZXJ2aXppbyBjb24gaWwgbW9kZWxsbyBzcGVjaWZpY2F0b1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7eyBrZXk6IHN0cmluZywgaXRlbXM6IHN0cmluZ1tdIH1bXX0gY3VzdG9tUGVybWlzc2lvbnMgUGVybWVzc2kgQ3VzdG9tXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRpYWxpemVDdXN0b21QZXJtaXNzaW9ucyhjdXN0b21QZXJtaXNzaW9uczogeyBrZXk6IHN0cmluZywgaXRlbXM6IHN0cmluZ1tdIH1bXSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXN0b21QZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY3VzdG9tUGVybWlzc2lvbnNbaV0ua2V5Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0Blc2ZhZW56YS9hY2Nlc3MtY29udHJvbF0gQ3VzdG9tIHBlcm1pc3Npb24gaW5pdGlhbGl6ZWQgd2l0aCBrZXlzIGxvbmdlciB0aGFuIGEgc2luZ2xlIGNoYXJhY3RlcnMuIElnbm9yaW5nIEVWRVJZVEhJTkcuXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFnZ2VkSXRlbXNDYWNoZSA9IGN1c3RvbVBlcm1pc3Npb25zO1xyXG4gICAgdGhpcy5Jbml0aWFsaXplZEN1c3RvbSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2UgbmVsbGEgc2Vzc2lvbmUgYXR0dWFsZSBlc2lzdGUgdW4gdXRlbnRlIGxvZ2dhdG8uIEZhIHVuIHNlbXBsaWNlIGNvbnRyb2xsbyBkaSBwcmVzZW56YSBzdWxsJ0lkZW50aXR5XHJcbiAgICovXHJcbiAgcHVibGljIGlzTG9nZ2VkSW4oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLklkZW50aXR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwcmVzc2lvbiDDqCBzY3JpdHRhIHRpcG8gLS0+IFI6Um9sZTEgJiYgUDpQZXJtaXNzaW9uMSB8fCAoUjpSb2xlMiAmJiBQOlBlcm1pc3Npb24xKVxyXG4gICAqIFF1aW5kaSBwaXV0dG9zdG8gY2hlIGltcGxlbWVudGFyc2kgdW4gcGFyc2VyIGRlbGxhIG1hZG9ubmEgaW4gc3RpbGUgQWxlc3NhbmRybyBwcmVuZG8gbGEgc3RyYWRhIHN0cm9uemEgZSB2ZWxvY2UgY29uIGwnZXZhbCA6UFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0FDRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5Jbml0aWFsaXplZClcclxuICAgICAgY29uc29sZS5lcnJvcihcIkFjY2VzcyBDb250cm9sIFN5c3RlbSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIENhbGwgdGhpcy5hY2Nlc3NDb250cm9sLmluaXRpYWxpemUoLi4uLCAuLi4pIGJlZm9yZSB1c2luZyB0aGUgc2VydmljZVwiKTtcclxuXHJcbiAgICBpZiAoIWV4cHJlc3Npb24pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXNwcmVzc2lvbmUgZ2nDoCB2YWx1dGF0YSwgbm9uIHNlcnZlIHJpdmFsdXRhcmxhXHJcbiAgICBpZiAodGhpcy5jYWNoZVtleHByZXNzaW9uXSlcclxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbZXhwcmVzc2lvbl07XHJcblxyXG4gICAgdmFyIFJvbGVzUGVybWlzc2lvbnNSZWdleHAgPSAvIT8uOltefCYoKV0rL2c7XHJcblxyXG4gICAgdmFyIG1hdGNoZXMgPSBleHByZXNzaW9uLm1hdGNoKFJvbGVzUGVybWlzc2lvbnNSZWdleHApO1xyXG5cclxuICAgIGlmICghbWF0Y2hlcylcclxuICAgICAgdGhyb3cgXCJFc3ByZXNzaW9uZSBBY2Nlc3MgQ29udHJvbCBub24gdmFsaWRhOiBcIiArIGV4cHJlc3Npb24gKyBcIi4gQXNzaWN1cmFyc2kgY2hlIHNpYSBzY3JpdHRhIGluIG1vZG8gY29ycmV0dG9cIjtcclxuXHJcbiAgICBtYXRjaGVzLmZvckVhY2godCA9PiB7XHJcbiAgICAgIHZhciBzcGxpdHMgPSB0LnNwbGl0KCc6Jyk7XHJcbiAgICAgIC8vIFBlciBydW9saSBlIHBlcm1lc3NpLCBzZSBobyBjb25kaXppb25pIGRpIGRlZmF1bHQgZSBsJ2VzcHJlc3Npb25lIG5vbiDDqCBhc3NvbHV0YSwgd3JhcHBvIG9nbmkgZWxlbWVudG8gY29uIGxlIGVzcHJlc3Npb25pIGRpIGRlZmF1bHRcclxuICAgICAgLy8gUGVyIGxlIGN1c3RvbSBwZXJtaXNzaW9ucyBpbnZlY2UsIGRhdG8gY2hlIHNvbm8gY29zZSBzdGFjY2F0ZSBkYSBydW9saSBlIHBlcm1lc3NpLCBub24gaGEgbWFpIHNlbnNvIGZhcmxvXHJcbiAgICAgIGlmIChzcGxpdHNbMF0gPT0gXCJSXCIgfHwgc3BsaXRzWzBdID09IFwiIVJcIikge1xyXG4gICAgICAgIGlmICh0aGlzLkFDQ19ERUZfQ09ORCAmJiB0aGlzLkFDQ19ERUZfQ09ORF9PUCAmJiAhYWJzb2x1dGUpIHtcclxuICAgICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgICAgbGV0IHRtcFJlcGxhY2UgPSBgKCR7dH0gJHt0aGlzLkFDQ19ERUZfQ09ORF9PUH0gJHt0aGlzLkFDQ19ERUZfQ09ORH0pYFxyXG4gICAgICAgICAgdmFyIG1hdGNoZXMyID0gdG1wUmVwbGFjZS5tYXRjaChSb2xlc1Blcm1pc3Npb25zUmVnZXhwKTtcclxuXHJcbiAgICAgICAgICBtYXRjaGVzMi5mb3JFYWNoKHQyID0+IHtcclxuICAgICAgICAgICAgdmFyIHNwbGl0czIgPSB0Mi5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICBpZiAoc3BsaXRzMlswXSA9PSBcIlJcIikgXHJcbiAgICAgICAgICAgICAgdG1wUmVwbGFjZSA9IHRtcFJlcGxhY2UucmVwbGFjZSh0Mi50cmltKCksICh0Mi5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNSb2xlKCdcIiArIHNwbGl0czJbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgICAgICAgZWxzZSBpZihzcGxpdHMyWzBdID09IFwiUFwiKVxyXG4gICAgICAgICAgICAgIHRtcFJlcGxhY2UgPSB0bXBSZXBsYWNlLnJlcGxhY2UodDIudHJpbSgpLCAodDIuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUGVybWlzc2lvbignXCIgKyBzcGxpdHMyWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0bXBSZXBsYWNlID0gdG1wUmVwbGFjZS5yZXBsYWNlKHQyLnRyaW0oKSwgKHQyLnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc0N1c3RvbSgnXCIgKyBzcGxpdHMyWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UodC50cmltKCksIHRtcFJlcGxhY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCAodC5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNSb2xlKCdcIiArIHNwbGl0c1sxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHNwbGl0c1swXSA9PSBcIlBcIiB8fCBzcGxpdHNbMF0gPT0gXCIhUFwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuQUNDX0RFRl9DT05EICYmIHRoaXMuQUNDX0RFRl9DT05EX09QICYmICFhYnNvbHV0ZSkge1xyXG4gICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgICBsZXQgdG1wUmVwbGFjZSA9IGAoJHt0fSAke3RoaXMuQUNDX0RFRl9DT05EX09QfSAke3RoaXMuQUNDX0RFRl9DT05EfSlgXHJcbiAgICAgICAgICB2YXIgbWF0Y2hlczIgPSB0bXBSZXBsYWNlLm1hdGNoKFJvbGVzUGVybWlzc2lvbnNSZWdleHApO1xyXG5cclxuICAgICAgICAgIG1hdGNoZXMyLmZvckVhY2godDIgPT4ge1xyXG4gICAgICAgICAgICB2YXIgc3BsaXRzMiA9IHQyLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIGlmIChzcGxpdHMyWzBdID09IFwiUlwiKSBcclxuICAgICAgICAgICAgICB0bXBSZXBsYWNlID0gdG1wUmVwbGFjZS5yZXBsYWNlKHQyLnRyaW0oKSwgKHQyLnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc1JvbGUoJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgICBlbHNlIGlmKHNwbGl0czJbMF0gPT0gXCJQXCIpXHJcbiAgICAgICAgICAgICAgdG1wUmVwbGFjZSA9IHRtcFJlcGxhY2UucmVwbGFjZSh0Mi50cmltKCksICh0Mi5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNQZXJtaXNzaW9uKCdcIiArIHNwbGl0czJbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRtcFJlcGxhY2UgPSB0bXBSZXBsYWNlLnJlcGxhY2UodDIudHJpbSgpLCAodDIuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzQ3VzdG9tKCdcIiArIHNwbGl0czJbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgdG1wUmVwbGFjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UodC50cmltKCksICh0LnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc1Blcm1pc3Npb24oJ1wiICsgc3BsaXRzWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UodC50cmltKCksICh0LnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc0N1c3RvbSgnXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInLCAnXCIgKyAoKHQuc3RhcnRzV2l0aChcIiFcIikgPyBzcGxpdHNbMF0udHJpbSgpLmNoYXJBdCgxKSA6IHNwbGl0c1swXS50cmltKCkpKSArIFwiJylcIik7XHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcmV0ID0gPGJvb2xlYW4+ZXZhbChleHByZXNzaW9uKTtcclxuICAgIC8vIENhY2hlIHZhbG9yZVxyXG4gICAgdGhpcy5jYWNoZVtleHByZXNzaW9uXSA9IHJldDtcclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVdGlsaXp6YXRvIGRhIGhhc0FDRXhwcmVzc2lvbiBkZW50cm8gZXZhbFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc1JvbGUocm9sZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuSWRlbnRpdHkpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRWxlbWVudG8gSWRlbnRpdHkgbm9uIHNwZWNpZmljYXRvIGluIEFjY2VzcyBDb250cm9sLiBHbGkgYWNjZXNzaSBzYXJhbm5vIHR1dHRpIGxpYmVyaSBkaSBkZWZhdWx0XCIpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuSWRlbnRpdHkuUm9sZXMgJiYgdGhpcy5JZGVudGl0eS5Sb2xlcy5sZW5ndGggPiAwICYmIHRoaXMuSWRlbnRpdHkuUm9sZXMuaW5kZXhPZihyb2xlKSAhPSAtMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFV0aWxpenphdG8gZGEgaGFzQUNFeHByZXNzaW9uIGRlbnRybyBldmFsXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5JZGVudGl0eS5QZXJtaXNzaW9ucyAmJiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5JZGVudGl0eS5QZXJtaXNzaW9ucy5pbmRleE9mKHBlcm1pc3Npb24pICE9IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6emF0byBkYSBoYXNBQ0V4cHJlc3Npb24gZGVudHJvIGV2YWxcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNDdXN0b20odmFsdWU6IHN0cmluZywgdGFnOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHZhciBpdGVtcyA9IHRoaXMudGFnZ2VkSXRlbXNDYWNoZS5maW5kKHQgPT4gdC5rZXkgPT0gdGFnKT8uaXRlbXM7XHJcbiAgICBpZiAoIWl0ZW1zKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2UgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiAhIWl0ZW1zLmZpbmQodCA9PiB0ID09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVudHJ5IHBvaW50IGNoZSBjb250cm9sbGEgdW4nZXNwcmVzc2lvbmUgaWRlbnRpZmljYW50ZSB1biBwZXJtZXNzbywgYWQgZXNlbXBpbyBcIlA6dmlzdWFsaXp6YXppb25lXCIgY29udHJvbGxhIGNoZSBsJ3V0ZW50ZSBjb2xsZWdhdG8gYWJiaWEgdW4gcGVybWVzc28gY2hlIHNpIGNoaWFtYSBcInZpc3VhbGl6emF6aW9uZVwiXHJcbiAgICovXHJcbiAgcHVibGljIGhhcyhleHByOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmhhc0FDRXhwcmVzc2lvbihleHByLCBhYnNvbHV0ZSk7XHJcbiAgfVxyXG59Il19
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjY2Vzcy1jb250cm9sL3NyYy9saWIvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUV6RDs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUF1Qi9CLGNBQWM7SUFDZCxZQUFzRCxZQUFvQixFQUErQyxlQUF1QjtRQUExRixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUErQyxvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQXRCaEo7O1dBRUc7UUFDSSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUVwQzs7V0FFRztRQUNJLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUUxQyxjQUFjO1FBQ04sVUFBSyxHQUFPLEVBQUUsQ0FBQztRQUV2QixjQUFjO1FBQ04scUJBQWdCLEdBQXVDLEVBQUUsQ0FBQztJQVFtRixDQUFDO0lBRXRKOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxRQUFvRDtRQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDJCQUEyQixDQUFDLGlCQUFxRDtRQUN0RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pELElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZD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QUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUcsQ0FBQyxJQUFZLEVBQUUsV0FBb0IsS0FBSztRQUNoRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O2lIQTNMVSxvQkFBb0Isa0JBd0JDLFlBQVksNkJBQW9ELGVBQWU7cUhBeEJwRyxvQkFBb0IsY0FEUixNQUFNOzJGQUNsQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkF5QmpCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsWUFBWTs7MEJBQWlDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFDQ19ERUZfQ09ORCwgQUNDX0RFRl9DT05EX09QIH0gZnJvbSBcIi4vdG9rZW5zXCI7XHJcblxyXG4vKipcclxuICogRW50cnlwb2ludCBkaSB0dXR0ZSBsZSBvcGVyYXppb25pIGVzcG9zdGUgZGFsbGEgbGlicmVyaWEgYWNjZXNzLWNvbnRyb2xcclxuICovXHJcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiBcInJvb3RcIn0pXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBsJ0lkZW50aXR5IMOoIHN0YXRhIGluaXppYWxpenphdGFcclxuICAgKi9cclxuICBwdWJsaWMgSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIHNvbm8gc3RhdGUgZWZmZXR0dWF0ZSBpbml6aWFsaXp6YXppb25pIGRpIEN1c3RvbSBQZXJtaXNzaW9uc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJbml0aWFsaXplZEN1c3RvbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgY2FjaGU6IHt9ID0ge307XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSB0YWdnZWRJdGVtc0NhY2hlOiB7IGtleTogc3RyaW5nLCBpdGVtczogc3RyaW5nW10gfVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElkZW50aXR5IGFzc29jaWF0YSBhIHF1ZXN0J2lzdGFuemEgZGVsIFNlcnZpemlvIEFjY2VzcyBDb250cm9sLCB1dGlsZSBzZSBzaSB2dW9sZSBhdmVyZSBhY2Nlc3NvIGEgUnVvbGkgZSBQZXJtZXNzaSBkaXJldHRhbWVudGUgZGEgcXVpLCBwZXIgcXVhbHNpdm9nbGlhIG1vdGl2b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBJZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9O1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoQUNDX0RFRl9DT05EKSBwcml2YXRlIEFDQ19ERUZfQ09ORDogc3RyaW5nLCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDQ19ERUZfQ09ORF9PUCkgcHJpdmF0ZSBBQ0NfREVGX0NPTkRfT1A6IHN0cmluZywpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml6aWFsaXp6YSBsJ0lkZW50aXR5IGRlbCBzZXJ2aXppbyBjb24gaWwgbW9kZWxsbyBzcGVjaWZpY2F0b1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbXMge3sgUm9sZXM6IHN0cmluZ1tdLCBQZXJtaXNzaW9uczogc3RyaW5nW10gfX0gaWRlbnRpdHkgSWRlbnRpdMOgIGFwcGxpY2F0aXZhIGNvbiBydW9saSBlIHBlcm1lc3NpXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRpYWxpemVJZGVudGl0eShpZGVudGl0eTogeyBSb2xlczogc3RyaW5nW10sIFBlcm1pc3Npb25zOiBzdHJpbmdbXSB9KSB7XHJcbiAgICB0aGlzLklkZW50aXR5ID0gaWRlbnRpdHk7XHJcbiAgICB0aGlzLkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXppYWxpenphIGkgcGVybWVzc2kgQ3VzdG9tIGRlbCBzZXJ2aXppbyBjb24gaWwgbW9kZWxsbyBzcGVjaWZpY2F0b1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7eyBrZXk6IHN0cmluZywgaXRlbXM6IHN0cmluZ1tdIH1bXX0gY3VzdG9tUGVybWlzc2lvbnMgUGVybWVzc2kgQ3VzdG9tXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRpYWxpemVDdXN0b21QZXJtaXNzaW9ucyhjdXN0b21QZXJtaXNzaW9uczogeyBrZXk6IHN0cmluZywgaXRlbXM6IHN0cmluZ1tdIH1bXSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXN0b21QZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY3VzdG9tUGVybWlzc2lvbnNbaV0ua2V5Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0Blc2ZhZW56YS9hY2Nlc3MtY29udHJvbF0gQ3VzdG9tIHBlcm1pc3Npb24gaW5pdGlhbGl6ZWQgd2l0aCBrZXlzIGxvbmdlciB0aGFuIGEgc2luZ2xlIGNoYXJhY3RlcnMuIElnbm9yaW5nIEVWRVJZVEhJTkcuXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFnZ2VkSXRlbXNDYWNoZSA9IGN1c3RvbVBlcm1pc3Npb25zO1xyXG4gICAgdGhpcy5Jbml0aWFsaXplZEN1c3RvbSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2UgbmVsbGEgc2Vzc2lvbmUgYXR0dWFsZSBlc2lzdGUgdW4gdXRlbnRlIGxvZ2dhdG8uIEZhIHVuIHNlbXBsaWNlIGNvbnRyb2xsbyBkaSBwcmVzZW56YSBzdWxsJ0lkZW50aXR5XHJcbiAgICovXHJcbiAgcHVibGljIGlzTG9nZ2VkSW4oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLklkZW50aXR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwcmVzc2lvbiDDqCBzY3JpdHRhIHRpcG8gLS0+IFI6Um9sZTEgJiYgUDpQZXJtaXNzaW9uMSB8fCAoUjpSb2xlMiAmJiBQOlBlcm1pc3Npb24xKVxyXG4gICAqIFF1aW5kaSBwaXV0dG9zdG8gY2hlIGltcGxlbWVudGFyc2kgdW4gcGFyc2VyIGRlbGxhIG1hZG9ubmEgaW4gc3RpbGUgQWxlc3NhbmRybyBwcmVuZG8gbGEgc3RyYWRhIHN0cm9uemEgZSB2ZWxvY2UgY29uIGwnZXZhbCA6UFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0FDRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5Jbml0aWFsaXplZClcclxuICAgICAgY29uc29sZS5lcnJvcihcIkFjY2VzcyBDb250cm9sIFN5c3RlbSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIENhbGwgdGhpcy5hY2Nlc3NDb250cm9sLmluaXRpYWxpemUoLi4uLCAuLi4pIGJlZm9yZSB1c2luZyB0aGUgc2VydmljZVwiKTtcclxuXHJcbiAgICBpZiAoIWV4cHJlc3Npb24pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXNwcmVzc2lvbmUgZ2nDoCB2YWx1dGF0YSwgbm9uIHNlcnZlIHJpdmFsdXRhcmxhXHJcbiAgICBpZiAodGhpcy5jYWNoZVtleHByZXNzaW9uXSlcclxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbZXhwcmVzc2lvbl07XHJcblxyXG4gICAgdmFyIFJvbGVzUGVybWlzc2lvbnNSZWdleHAgPSAvIT8uOltefCYoKV0rL2c7XHJcblxyXG4gICAgdmFyIG1hdGNoZXMgPSBleHByZXNzaW9uLm1hdGNoKFJvbGVzUGVybWlzc2lvbnNSZWdleHApO1xyXG5cclxuICAgIGlmICghbWF0Y2hlcylcclxuICAgICAgdGhyb3cgXCJFc3ByZXNzaW9uZSBBY2Nlc3MgQ29udHJvbCBub24gdmFsaWRhOiBcIiArIGV4cHJlc3Npb24gKyBcIi4gQXNzaWN1cmFyc2kgY2hlIHNpYSBzY3JpdHRhIGluIG1vZG8gY29ycmV0dG9cIjtcclxuXHJcbiAgICBtYXRjaGVzLmZvckVhY2godCA9PiB7XHJcbiAgICAgIHZhciBzcGxpdHMgPSB0LnNwbGl0KCc6Jyk7XHJcbiAgICAgIC8vIFBlciBydW9saSBlIHBlcm1lc3NpLCBzZSBobyBjb25kaXppb25pIGRpIGRlZmF1bHQgZSBsJ2VzcHJlc3Npb25lIG5vbiDDqCBhc3NvbHV0YSwgd3JhcHBvIG9nbmkgZWxlbWVudG8gY29uIGxlIGVzcHJlc3Npb25pIGRpIGRlZmF1bHRcclxuICAgICAgLy8gUGVyIGxlIGN1c3RvbSBwZXJtaXNzaW9ucyBpbnZlY2UsIGRhdG8gY2hlIHNvbm8gY29zZSBzdGFjY2F0ZSBkYSBydW9saSBlIHBlcm1lc3NpLCBub24gaGEgbWFpIHNlbnNvIGZhcmxvXHJcbiAgICAgIGlmIChzcGxpdHNbMF0gPT0gXCJSXCIgfHwgc3BsaXRzWzBdID09IFwiIVJcIikge1xyXG4gICAgICAgIGlmICh0aGlzLkFDQ19ERUZfQ09ORCAmJiB0aGlzLkFDQ19ERUZfQ09ORF9PUCAmJiAhYWJzb2x1dGUpIHtcclxuICAgICAgICAgIGxldCB0bXBSZXBsYWNlID0gYCgke3R9ICR7dGhpcy5BQ0NfREVGX0NPTkRfT1B9ICR7dGhpcy5BQ0NfREVGX0NPTkR9KWBcclxuICAgICAgICAgIHZhciBtYXRjaGVzMiA9IHRtcFJlcGxhY2UubWF0Y2goUm9sZXNQZXJtaXNzaW9uc1JlZ2V4cCk7XHJcblxyXG4gICAgICAgICAgbWF0Y2hlczIuZm9yRWFjaCh0MiA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdHMyID0gdDIuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgaWYgKHNwbGl0czJbMF0gPT0gXCJSXCIgfHwgc3BsaXRzMlswXSA9PSBcIiFSXCIpIFxyXG4gICAgICAgICAgICAgIHRtcFJlcGxhY2UgPSB0bXBSZXBsYWNlLnJlcGxhY2UodDIudHJpbSgpLCAodDIuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHMyWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3BsaXRzMlswXSA9PSBcIlBcIiB8fCBzcGxpdHMyWzBdID09IFwiIVBcIilcclxuICAgICAgICAgICAgICB0bXBSZXBsYWNlID0gdG1wUmVwbGFjZS5yZXBsYWNlKHQyLnRyaW0oKSwgKHQyLnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc1Blcm1pc3Npb24oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG1wUmVwbGFjZSA9IHRtcFJlcGxhY2UucmVwbGFjZSh0Mi50cmltKCksICh0Mi5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNDdXN0b20oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCB0bXBSZXBsYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChzcGxpdHNbMF0gPT0gXCJQXCIgfHwgc3BsaXRzWzBdID09IFwiIVBcIikge1xyXG4gICAgICAgIGlmICh0aGlzLkFDQ19ERUZfQ09ORCAmJiB0aGlzLkFDQ19ERUZfQ09ORF9PUCAmJiAhYWJzb2x1dGUpIHtcclxuICAgICAgICAgIGxldCB0bXBSZXBsYWNlID0gYCgke3R9ICR7dGhpcy5BQ0NfREVGX0NPTkRfT1B9ICR7dGhpcy5BQ0NfREVGX0NPTkR9KWBcclxuICAgICAgICAgIHZhciBtYXRjaGVzMiA9IHRtcFJlcGxhY2UubWF0Y2goUm9sZXNQZXJtaXNzaW9uc1JlZ2V4cCk7XHJcblxyXG4gICAgICAgICAgbWF0Y2hlczIuZm9yRWFjaCh0MiA9PiB7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdHMyID0gdDIuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgaWYgKHNwbGl0czJbMF0gPT0gXCJSXCIgfHwgc3BsaXRzMlswXSA9PSBcIiFSXCIpIFxyXG4gICAgICAgICAgICAgIHRtcFJlcGxhY2UgPSB0bXBSZXBsYWNlLnJlcGxhY2UodDIudHJpbSgpLCAodDIuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUm9sZSgnXCIgKyBzcGxpdHMyWzFdLnRyaW0oKSArIFwiJylcIik7XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3BsaXRzMlswXSA9PSBcIlBcIiB8fCBzcGxpdHMyWzBdID09IFwiIVBcIilcclxuICAgICAgICAgICAgICB0bXBSZXBsYWNlID0gdG1wUmVwbGFjZS5yZXBsYWNlKHQyLnRyaW0oKSwgKHQyLnN0YXJ0c1dpdGgoXCIhXCIpID8gJyEnIDogJycpICsgXCJ0aGlzLmhhc1Blcm1pc3Npb24oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG1wUmVwbGFjZSA9IHRtcFJlcGxhY2UucmVwbGFjZSh0Mi50cmltKCksICh0Mi5zdGFydHNXaXRoKFwiIVwiKSA/ICchJyA6ICcnKSArIFwidGhpcy5oYXNDdXN0b20oJ1wiICsgc3BsaXRzMlsxXS50cmltKCkgKyBcIicpXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKHQudHJpbSgpLCB0bXBSZXBsYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzUGVybWlzc2lvbignXCIgKyBzcGxpdHNbMV0udHJpbSgpICsgXCInKVwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSh0LnRyaW0oKSwgKHQuc3RhcnRzV2l0aChcIiFcIikgPyAnIScgOiAnJykgKyBcInRoaXMuaGFzQ3VzdG9tKCdcIiArIHNwbGl0c1sxXS50cmltKCkgKyBcIicsICdcIiArICgodC5zdGFydHNXaXRoKFwiIVwiKSA/IHNwbGl0c1swXS50cmltKCkuY2hhckF0KDEpIDogc3BsaXRzWzBdLnRyaW0oKSkpICsgXCInKVwiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciByZXQgPSA8Ym9vbGVhbj5ldmFsKGV4cHJlc3Npb24pO1xyXG4gICAgLy8gQ2FjaGUgdmFsb3JlXHJcbiAgICB0aGlzLmNhY2hlW2V4cHJlc3Npb25dID0gcmV0O1xyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFV0aWxpenphdG8gZGEgaGFzQUNFeHByZXNzaW9uIGRlbnRybyBldmFsXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5JZGVudGl0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJFbGVtZW50byBJZGVudGl0eSBub24gc3BlY2lmaWNhdG8gaW4gQWNjZXNzIENvbnRyb2wuIEdsaSBhY2Nlc3NpIHNhcmFubm8gdHV0dGkgbGliZXJpIGRpIGRlZmF1bHRcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5JZGVudGl0eS5Sb2xlcyAmJiB0aGlzLklkZW50aXR5LlJvbGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5JZGVudGl0eS5Sb2xlcy5pbmRleE9mKHJvbGUpICE9IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6emF0byBkYSBoYXNBQ0V4cHJlc3Npb24gZGVudHJvIGV2YWxcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLklkZW50aXR5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkVsZW1lbnRvIElkZW50aXR5IG5vbiBzcGVjaWZpY2F0byBpbiBBY2Nlc3MgQ29udHJvbC4gR2xpIGFjY2Vzc2kgc2FyYW5ubyB0dXR0aSBsaWJlcmkgZGkgZGVmYXVsdFwiKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zICYmIHRoaXMuSWRlbnRpdHkuUGVybWlzc2lvbnMubGVuZ3RoID4gMCAmJiB0aGlzLklkZW50aXR5LlBlcm1pc3Npb25zLmluZGV4T2YocGVybWlzc2lvbikgIT0gLTE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVdGlsaXp6YXRvIGRhIGhhc0FDRXhwcmVzc2lvbiBkZW50cm8gZXZhbFxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0N1c3RvbSh2YWx1ZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGl0ZW1zID0gdGhpcy50YWdnZWRJdGVtc0NhY2hlLmZpbmQodCA9PiB0LmtleSA9PSB0YWcpPy5pdGVtcztcclxuICAgIGlmICghaXRlbXMpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuICEhaXRlbXMuZmluZCh0ID0+IHQgPT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnkgcG9pbnQgY2hlIGNvbnRyb2xsYSB1bidlc3ByZXNzaW9uZSBpZGVudGlmaWNhbnRlIHVuIHBlcm1lc3NvLCBhZCBlc2VtcGlvIFwiUDp2aXN1YWxpenphemlvbmVcIiBjb250cm9sbGEgY2hlIGwndXRlbnRlIGNvbGxlZ2F0byBhYmJpYSB1biBwZXJtZXNzbyBjaGUgc2kgY2hpYW1hIFwidmlzdWFsaXp6YXppb25lXCJcclxuICAgKi9cclxuICBwdWJsaWMgaGFzKGV4cHI6IHN0cmluZywgYWJzb2x1dGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQUNFeHByZXNzaW9uKGV4cHIsIGFic29sdXRlKTtcclxuICB9XHJcbn0iXX0=
@@ -90,14 +90,13 @@ class AccessControlService {
90
90
  // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo
91
91
  if (splits[0] == "R" || splits[0] == "!R") {
92
92
  if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
93
- debugger;
94
93
  let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
95
94
  var matches2 = tmpReplace.match(RolesPermissionsRegexp);
96
95
  matches2.forEach(t2 => {
97
96
  var splits2 = t2.split(':');
98
- if (splits2[0] == "R")
97
+ if (splits2[0] == "R" || splits2[0] == "!R")
99
98
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
100
- else if (splits2[0] == "P")
99
+ else if (splits2[0] == "P" || splits2[0] == "!P")
101
100
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
102
101
  else
103
102
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
@@ -109,14 +108,13 @@ class AccessControlService {
109
108
  }
110
109
  else if (splits[0] == "P" || splits[0] == "!P") {
111
110
  if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
112
- debugger;
113
111
  let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
114
112
  var matches2 = tmpReplace.match(RolesPermissionsRegexp);
115
113
  matches2.forEach(t2 => {
116
114
  var splits2 = t2.split(':');
117
- if (splits2[0] == "R")
115
+ if (splits2[0] == "R" || splits2[0] == "!R")
118
116
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
119
- else if (splits2[0] == "P")
117
+ else if (splits2[0] == "P" || splits2[0] == "!P")
120
118
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
121
119
  else
122
120
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-access-control.mjs","sources":["../../../projects/access-control/src/lib/tokens.ts","../../../projects/access-control/src/lib/access-control.service.ts","../../../projects/access-control/src/lib/access-control.directive.ts","../../../projects/access-control/src/lib/models/ComponentContext.ts","../../../projects/access-control/src/lib/context-aware.directive.ts","../../../projects/access-control/src/lib/access-control.pipe.ts","../../../projects/access-control/src/lib/access-control.module.ts","../../../projects/access-control/src/lib/models/AccessControlModuleConfig.ts","../../../projects/access-control/src/lib/AccessControlRouteGuard.ts","../../../projects/access-control/src/public-api.ts","../../../projects/access-control/src/esfaenza-access-control.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che racchiude la chiave custom da controllare quando si effettuano controlli sul ComponentContext */\r\nexport const ACC_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACC_CUSTOMKEY');\r\n\r\n/** Token che indica la condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND');\r\n\r\n/** Token che indica l'operatore della condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND_OP: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND_OP');\r\n\r\n/** Modalità di Debug */\r\nexport const ACC_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('ACC_DEBUG_MODE');","// Angular\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { ACC_DEF_COND, ACC_DEF_COND_OP } from \"./tokens\";\r\n\r\n/**\r\n * Entrypoint di tutte le operazioni esposte dalla libreria access-control\r\n */\r\n@Injectable({providedIn: \"root\"})\r\nexport class AccessControlService {\r\n\r\n /**\r\n * Indica se l'Identity è stata inizializzata\r\n */\r\n public Initialized: boolean = false;\r\n\r\n /**\r\n * Indica se sono state effettuate inizializzazioni di Custom Permissions\r\n */\r\n public InitializedCustom: boolean = false;\r\n\r\n /** @ignore */\r\n private cache: {} = {};\r\n\r\n /** @ignore */\r\n private taggedItemsCache: { key: string, items: string[] }[] = [];\r\n\r\n /**\r\n * Identity associata a quest'istanza del Servizio Access Control, utile se si vuole avere accesso a Ruoli e Permessi direttamente da qui, per qualsivoglia motivo\r\n */\r\n public Identity: { Roles: string[], Permissions: string[] };\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(ACC_DEF_COND) private ACC_DEF_COND: string, @Optional() @Inject(ACC_DEF_COND_OP) private ACC_DEF_COND_OP: string,) { }\r\n\r\n /**\r\n * Inizializza l'Identity del servizio con il modello specificato\r\n * \r\n * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi\r\n */\r\n public initializeIdentity(identity: { Roles: string[], Permissions: string[] }) {\r\n this.Identity = identity;\r\n this.Initialized = true;\r\n }\r\n\r\n /**\r\n * Inizializza i permessi Custom del servizio con il modello specificato\r\n * \r\n * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom\r\n */\r\n public initializeCustomPermissions(customPermissions: { key: string, items: string[] }[]) {\r\n for (let i = 0; i < customPermissions.length; i++) {\r\n if (customPermissions[i].key.length > 1) {\r\n console.error(\"[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.\");\r\n return;\r\n }\r\n }\r\n\r\n this.taggedItemsCache = customPermissions;\r\n this.InitializedCustom = true;\r\n }\r\n\r\n /**\r\n * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity\r\n */\r\n public isLoggedIn() {\r\n return !!this.Identity;\r\n }\r\n\r\n /**\r\n * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)\r\n * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P\r\n * \r\n * @ignore\r\n */\r\n private hasACExpression(expression: string, absolute: boolean = false): boolean {\r\n if (!this.Initialized)\r\n console.error(\"Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service\");\r\n\r\n if (!expression)\r\n return true;\r\n\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n\r\n // Espressione già valutata, non serve rivalutarla\r\n if (this.cache[expression])\r\n return this.cache[expression];\r\n\r\n var RolesPermissionsRegexp = /!?.:[^|&()]+/g;\r\n\r\n var matches = expression.match(RolesPermissionsRegexp);\r\n\r\n if (!matches)\r\n throw \"Espressione Access Control non valida: \" + expression + \". Assicurarsi che sia scritta in modo corretto\";\r\n\r\n matches.forEach(t => {\r\n var splits = t.split(':');\r\n // Per ruoli e permessi, se ho condizioni di default e l'espressione non è assoluta, wrappo ogni elemento con le espressioni di default\r\n // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo\r\n if (splits[0] == \"R\" || splits[0] == \"!R\") {\r\n if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {\r\n debugger;\r\n let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`\r\n var matches2 = tmpReplace.match(RolesPermissionsRegexp);\r\n\r\n matches2.forEach(t2 => {\r\n var splits2 = t2.split(':');\r\n if (splits2[0] == \"R\") \r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits2[1].trim() + \"')\");\r\n else if(splits2[0] == \"P\")\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits2[1].trim() + \"')\");\r\n else\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits2[1].trim() + \"')\");\r\n });\r\n expression = expression.replace(t.trim(), tmpReplace);\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits[1].trim() + \"')\");\r\n }\r\n else if (splits[0] == \"P\" || splits[0] == \"!P\") {\r\n if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {\r\n debugger;\r\n let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`\r\n var matches2 = tmpReplace.match(RolesPermissionsRegexp);\r\n\r\n matches2.forEach(t2 => {\r\n var splits2 = t2.split(':');\r\n if (splits2[0] == \"R\") \r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits2[1].trim() + \"')\");\r\n else if(splits2[0] == \"P\")\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits2[1].trim() + \"')\");\r\n else\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits2[1].trim() + \"')\");\r\n });\r\n expression = expression.replace(t.trim(), tmpReplace);\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits[1].trim() + \"')\");\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits[1].trim() + \"', '\" + ((t.startsWith(\"!\") ? splits[0].trim().charAt(1) : splits[0].trim())) + \"')\");\r\n });\r\n\r\n var ret = <boolean>eval(expression);\r\n // Cache valore\r\n this.cache[expression] = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasRole(role: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasPermission(permission: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasCustom(value: string, tag: string): boolean {\r\n var items = this.taggedItemsCache.find(t => t.key == tag)?.items;\r\n if (!items)\r\n return true;\r\n else if (items.length == 0)\r\n return false;\r\n else\r\n return !!items.find(t => t == value);\r\n }\r\n\r\n /**\r\n * Entry point che controlla un'espressione identificante un permesso, ad esempio \"P:visualizzazione\" controlla che l'utente collegato abbia un permesso che si chiama \"visualizzazione\"\r\n */\r\n public has(expr: string, absolute: boolean = false) {\r\n return this.hasACExpression(expr, absolute);\r\n }\r\n}","// Angular\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Direttiva che permette di gestire il controllo accessi su componenti HTML. \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Directive({\r\n selector: '[ac]',\r\n})\r\nexport class AccessControlDirective {\r\n \r\n /** \r\n * Espressione da processare scritta come {Chiave}:{Valore}\r\n * \r\n * Le {Chiave} disponibili sono di default \"R\" per i ruoli e \"P\" per i permessi. È possibile espanderle con le Custom Permissions.\r\n * \r\n * Nelle ultime versioni del template è anche presente di default la custom permission \"X\" che indica se l'applicaizone è Esterna o no\r\n */\r\n @Input() ac : string = null;\r\n\r\n /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */\r\n @Input() acAbsolute: boolean = false;\r\n\r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private _ac: AccessControlService) { }\r\n\r\n\r\n ngOnInit(){\r\n var allow = this._ac.has(this.ac, this.acAbsolute);\r\n\r\n //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template\r\n\r\n if (allow) this.viewContainer.createEmbeddedView(this.templateRef);\r\n else this.viewContainer.clear();\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale\r\n */\r\n@Injectable()\r\nexport class ComponentContext{\r\n /**\r\n * Nome del Contesto assegnato al Componente\r\n */\r\n name : string;\r\n}","// Angular\r\nimport { Directive, ElementRef, Optional, Inject } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\nimport { ACC_CUSTOMKEY } from \"./tokens\"\r\n\r\n// Classi\r\nimport { ComponentContext } from \"./models/ComponentContext\";\r\n\r\n/**\r\n * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.\r\n * \r\n * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext\r\n */\r\n@Directive({\r\n selector: '[contextAware]',\r\n})\r\nexport class ContextAwareDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(element: ElementRef, @Optional() private context: ComponentContext, private ac: AccessControlService, @Optional() @Inject(ACC_CUSTOMKEY) private ACC_CUSTOMKEY: string) {\r\n var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + \":\" + this.context.name,);\r\n\r\n if (!allow)\r\n element.nativeElement.setAttribute(\"enabled\", \"true\");\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Pipe che restituisce **true** quando il controllo sugli accessi ha successo, false altrimenti \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Pipe({ name: 'ac' })\r\nexport class AccessControlPipe implements PipeTransform {\r\n\r\n\r\n /** @ignore Costruttore */\r\n constructor(private _ac: AccessControlService) { }\r\n\r\n /**\r\n * Trasforma l'espressione ac in un booleano\r\n * @param value Espressione ac\r\n * @param absolute Indica se valutare **ac** in maniera assoluta o meno\r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n transform(value: string, absolute?: boolean) {\r\n return this._ac.has(value, absolute);\r\n }\r\n}","\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ACC_CUSTOMKEY, ACC_DEBUG_MODE, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';\r\n\r\nimport { AccessControlModuleConfig } from './models/AccessControlModuleConfig';\r\nimport { AccessControlDirective } from './access-control.directive';\r\nimport { ContextAwareDirective } from './context-aware.directive';\r\nimport { AccessControlPipe } from './access-control.pipe';\r\n\r\n@NgModule({\r\n declarations: [AccessControlDirective, ContextAwareDirective, AccessControlPipe],\r\n exports:[AccessControlDirective, ContextAwareDirective, AccessControlPipe]\r\n})\r\nexport class AccessControlModule {\r\n static forRoot(config?: AccessControlModuleConfig): ModuleWithProviders<AccessControlModule> {\r\n return {\r\n ngModule: AccessControlModule,\r\n providers: [\r\n { provide: ACC_CUSTOMKEY, useValue: config?.contextAwareKey || null },\r\n { provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },\r\n { provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' },\r\n { provide: ACC_DEBUG_MODE, useValue: config?.debugMode || false },\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'\r\n */\r\nexport class AccessControlModuleConfig {\r\n\r\n /** Chiave custom su cui la **contextAwareDirective** si basa per controllare se l'elemento è abilitato o meno */\r\n contextAwareKey?: string;\r\n\r\n /** Condizione di default da aggiungere a ogni condizione utente. Es: 'R:Jace Admin' */\r\n defaultCondition?: string;\r\n\r\n /** Relazione logica fra la condizione di default e la condizione utente. Es: '||'. Di default viene utilizzato l'OR logico */\r\n defaultConditionLogicalOperator?: string;\r\n\r\n /** Attiva la modalità di debug per l'esposizione di messaggi significativi */\r\n debugMode?: boolean;\r\n}","//Angular\r\nimport { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot } from \"@angular/router\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n//Libs\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n//Models\r\nimport { AccessControlService } from './access-control.service';\r\n\r\n/**\r\n * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe\r\n * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:\r\n * \r\n * ```typescript\r\n * @Injectable()\r\n * export class HasAuthGuardComponent extends BaseRouterGuard {\r\n * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {\r\n * super(ms, acc, router, ts);\r\n * this.Routes = [\r\n * { route: \"page_route\", permission: \"P:perm_one\" },\r\n * { route: \"*\", permission: \"R:role_one\" }\r\n * ]\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport class AccessControlRouteGuard implements CanActivateChild {\r\n\r\n /**\r\n * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi\r\n * \r\n * @default\r\n */\r\n protected LoginRoute : string = \"login\";\r\n\r\n /**\r\n * Permette di specificare delle Route sempre consentite, anche a livello di \"Radice\". Ad esempio la Root \"test\" permetterà\r\n * l'accesso a tutte le route che anche solo iniziano per \"test\"\r\n */\r\n protected AlwaysAllowedRoots: string[] = [];\r\n \r\n /**\r\n * Lista di Route con la loro espressione di controllo per valutare i permessi\r\n */\r\n protected Routes: { route: any; permission: string; }[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgService : MessageService, private ac: AccessControlService, private router: Router) {\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n canActivateChild(route: ActivatedRouteSnapshot, _: RouterStateSnapshot): Promise<boolean> {\r\n var url = route.url.join('/');\r\n //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite\r\n if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))\r\n return Promise.resolve(false);\r\n \r\n var routeMatched: boolean = false;\r\n for (let i = 0; i < this.Routes.length; i++) {\r\n let r = this.Routes[i];\r\n //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare\r\n if (url.indexOf(r.route) != -1) {\r\n routeMatched = true;\r\n return this.handleMatch(url, r);\r\n }\r\n }\r\n //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella\r\n if (!routeMatched) {\r\n var wildcardRoute = this.Routes.find(r => r.route == \"*\");\r\n if (wildcardRoute)\r\n return this.handleMatch(url, wildcardRoute);\r\n else\r\n console.log(\"Navigaizone avvenuta su route sconosciuta: \" + url);\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private handleMatch(fromurl: string, r: any) {\r\n let identity = this.ac.Identity;\r\n\r\n if (this.ac.has(r.permission) ||\r\n (\r\n // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente\r\n // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci\r\n // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve\r\n this.ac.Initialized &&\r\n (!identity.Roles || identity.Roles.length == 0) &&\r\n (!identity.Permissions || identity.Permissions.length == 0)\r\n ))\r\n return Promise.resolve(true);\r\n else {\r\n //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione\r\n //Se ho aperto una nuova tab invece rispedisco al login\r\n if (window.history.length > 2 && this.ac.isLoggedIn()) {\r\n this.msgService.simpleError(\"Page Unauthorized\");\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n this.onRedirectInProgress();\r\n this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Callback che viene eseguito prima che la Guard reindirizzi al login\r\n */\r\n protected onRedirectInProgress() {\r\n }\r\n}","/*\r\n * Public API Surface of access-control\r\n */\r\n\r\nexport * from './lib/access-control.module';\r\nexport * from './lib/access-control.pipe';\r\nexport * from './lib/access-control.service';\r\nexport * from './lib/access-control.directive'\r\nexport * from './lib/context-aware.directive';\r\nexport * from \"./lib/models/AccessControlModuleConfig\";\r\nexport * from \"./lib/AccessControlRouteGuard\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/models/ComponentContext\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-access-control.mjs","sources":["../../../projects/access-control/src/lib/tokens.ts","../../../projects/access-control/src/lib/access-control.service.ts","../../../projects/access-control/src/lib/access-control.directive.ts","../../../projects/access-control/src/lib/models/ComponentContext.ts","../../../projects/access-control/src/lib/context-aware.directive.ts","../../../projects/access-control/src/lib/access-control.pipe.ts","../../../projects/access-control/src/lib/access-control.module.ts","../../../projects/access-control/src/lib/models/AccessControlModuleConfig.ts","../../../projects/access-control/src/lib/AccessControlRouteGuard.ts","../../../projects/access-control/src/public-api.ts","../../../projects/access-control/src/esfaenza-access-control.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che racchiude la chiave custom da controllare quando si effettuano controlli sul ComponentContext */\r\nexport const ACC_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACC_CUSTOMKEY');\r\n\r\n/** Token che indica la condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND');\r\n\r\n/** Token che indica l'operatore della condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND_OP: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND_OP');\r\n\r\n/** Modalità di Debug */\r\nexport const ACC_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('ACC_DEBUG_MODE');","// Angular\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { ACC_DEF_COND, ACC_DEF_COND_OP } from \"./tokens\";\r\n\r\n/**\r\n * Entrypoint di tutte le operazioni esposte dalla libreria access-control\r\n */\r\n@Injectable({providedIn: \"root\"})\r\nexport class AccessControlService {\r\n\r\n /**\r\n * Indica se l'Identity è stata inizializzata\r\n */\r\n public Initialized: boolean = false;\r\n\r\n /**\r\n * Indica se sono state effettuate inizializzazioni di Custom Permissions\r\n */\r\n public InitializedCustom: boolean = false;\r\n\r\n /** @ignore */\r\n private cache: {} = {};\r\n\r\n /** @ignore */\r\n private taggedItemsCache: { key: string, items: string[] }[] = [];\r\n\r\n /**\r\n * Identity associata a quest'istanza del Servizio Access Control, utile se si vuole avere accesso a Ruoli e Permessi direttamente da qui, per qualsivoglia motivo\r\n */\r\n public Identity: { Roles: string[], Permissions: string[] };\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(ACC_DEF_COND) private ACC_DEF_COND: string, @Optional() @Inject(ACC_DEF_COND_OP) private ACC_DEF_COND_OP: string,) { }\r\n\r\n /**\r\n * Inizializza l'Identity del servizio con il modello specificato\r\n * \r\n * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi\r\n */\r\n public initializeIdentity(identity: { Roles: string[], Permissions: string[] }) {\r\n this.Identity = identity;\r\n this.Initialized = true;\r\n }\r\n\r\n /**\r\n * Inizializza i permessi Custom del servizio con il modello specificato\r\n * \r\n * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom\r\n */\r\n public initializeCustomPermissions(customPermissions: { key: string, items: string[] }[]) {\r\n for (let i = 0; i < customPermissions.length; i++) {\r\n if (customPermissions[i].key.length > 1) {\r\n console.error(\"[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.\");\r\n return;\r\n }\r\n }\r\n\r\n this.taggedItemsCache = customPermissions;\r\n this.InitializedCustom = true;\r\n }\r\n\r\n /**\r\n * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity\r\n */\r\n public isLoggedIn() {\r\n return !!this.Identity;\r\n }\r\n\r\n /**\r\n * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)\r\n * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P\r\n * \r\n * @ignore\r\n */\r\n private hasACExpression(expression: string, absolute: boolean = false): boolean {\r\n if (!this.Initialized)\r\n console.error(\"Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service\");\r\n\r\n if (!expression)\r\n return true;\r\n\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n\r\n // Espressione già valutata, non serve rivalutarla\r\n if (this.cache[expression])\r\n return this.cache[expression];\r\n\r\n var RolesPermissionsRegexp = /!?.:[^|&()]+/g;\r\n\r\n var matches = expression.match(RolesPermissionsRegexp);\r\n\r\n if (!matches)\r\n throw \"Espressione Access Control non valida: \" + expression + \". Assicurarsi che sia scritta in modo corretto\";\r\n\r\n matches.forEach(t => {\r\n var splits = t.split(':');\r\n // Per ruoli e permessi, se ho condizioni di default e l'espressione non è assoluta, wrappo ogni elemento con le espressioni di default\r\n // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo\r\n if (splits[0] == \"R\" || splits[0] == \"!R\") {\r\n if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {\r\n let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`\r\n var matches2 = tmpReplace.match(RolesPermissionsRegexp);\r\n\r\n matches2.forEach(t2 => {\r\n var splits2 = t2.split(':');\r\n if (splits2[0] == \"R\" || splits2[0] == \"!R\") \r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits2[1].trim() + \"')\");\r\n else if(splits2[0] == \"P\" || splits2[0] == \"!P\")\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits2[1].trim() + \"')\");\r\n else\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits2[1].trim() + \"')\");\r\n });\r\n expression = expression.replace(t.trim(), tmpReplace);\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits[1].trim() + \"')\");\r\n }\r\n else if (splits[0] == \"P\" || splits[0] == \"!P\") {\r\n if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {\r\n let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`\r\n var matches2 = tmpReplace.match(RolesPermissionsRegexp);\r\n\r\n matches2.forEach(t2 => {\r\n var splits2 = t2.split(':');\r\n if (splits2[0] == \"R\" || splits2[0] == \"!R\") \r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits2[1].trim() + \"')\");\r\n else if(splits2[0] == \"P\" || splits2[0] == \"!P\")\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits2[1].trim() + \"')\");\r\n else\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits2[1].trim() + \"')\");\r\n });\r\n expression = expression.replace(t.trim(), tmpReplace);\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits[1].trim() + \"')\");\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits[1].trim() + \"', '\" + ((t.startsWith(\"!\") ? splits[0].trim().charAt(1) : splits[0].trim())) + \"')\");\r\n });\r\n\r\n var ret = <boolean>eval(expression);\r\n // Cache valore\r\n this.cache[expression] = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasRole(role: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasPermission(permission: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasCustom(value: string, tag: string): boolean {\r\n var items = this.taggedItemsCache.find(t => t.key == tag)?.items;\r\n if (!items)\r\n return true;\r\n else if (items.length == 0)\r\n return false;\r\n else\r\n return !!items.find(t => t == value);\r\n }\r\n\r\n /**\r\n * Entry point che controlla un'espressione identificante un permesso, ad esempio \"P:visualizzazione\" controlla che l'utente collegato abbia un permesso che si chiama \"visualizzazione\"\r\n */\r\n public has(expr: string, absolute: boolean = false) {\r\n return this.hasACExpression(expr, absolute);\r\n }\r\n}","// Angular\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Direttiva che permette di gestire il controllo accessi su componenti HTML. \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Directive({\r\n selector: '[ac]',\r\n})\r\nexport class AccessControlDirective {\r\n \r\n /** \r\n * Espressione da processare scritta come {Chiave}:{Valore}\r\n * \r\n * Le {Chiave} disponibili sono di default \"R\" per i ruoli e \"P\" per i permessi. È possibile espanderle con le Custom Permissions.\r\n * \r\n * Nelle ultime versioni del template è anche presente di default la custom permission \"X\" che indica se l'applicaizone è Esterna o no\r\n */\r\n @Input() ac : string = null;\r\n\r\n /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */\r\n @Input() acAbsolute: boolean = false;\r\n\r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private _ac: AccessControlService) { }\r\n\r\n\r\n ngOnInit(){\r\n var allow = this._ac.has(this.ac, this.acAbsolute);\r\n\r\n //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template\r\n\r\n if (allow) this.viewContainer.createEmbeddedView(this.templateRef);\r\n else this.viewContainer.clear();\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale\r\n */\r\n@Injectable()\r\nexport class ComponentContext{\r\n /**\r\n * Nome del Contesto assegnato al Componente\r\n */\r\n name : string;\r\n}","// Angular\r\nimport { Directive, ElementRef, Optional, Inject } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\nimport { ACC_CUSTOMKEY } from \"./tokens\"\r\n\r\n// Classi\r\nimport { ComponentContext } from \"./models/ComponentContext\";\r\n\r\n/**\r\n * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.\r\n * \r\n * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext\r\n */\r\n@Directive({\r\n selector: '[contextAware]',\r\n})\r\nexport class ContextAwareDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(element: ElementRef, @Optional() private context: ComponentContext, private ac: AccessControlService, @Optional() @Inject(ACC_CUSTOMKEY) private ACC_CUSTOMKEY: string) {\r\n var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + \":\" + this.context.name,);\r\n\r\n if (!allow)\r\n element.nativeElement.setAttribute(\"enabled\", \"true\");\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Pipe che restituisce **true** quando il controllo sugli accessi ha successo, false altrimenti \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Pipe({ name: 'ac' })\r\nexport class AccessControlPipe implements PipeTransform {\r\n\r\n\r\n /** @ignore Costruttore */\r\n constructor(private _ac: AccessControlService) { }\r\n\r\n /**\r\n * Trasforma l'espressione ac in un booleano\r\n * @param value Espressione ac\r\n * @param absolute Indica se valutare **ac** in maniera assoluta o meno\r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n transform(value: string, absolute?: boolean) {\r\n return this._ac.has(value, absolute);\r\n }\r\n}","\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ACC_CUSTOMKEY, ACC_DEBUG_MODE, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';\r\n\r\nimport { AccessControlModuleConfig } from './models/AccessControlModuleConfig';\r\nimport { AccessControlDirective } from './access-control.directive';\r\nimport { ContextAwareDirective } from './context-aware.directive';\r\nimport { AccessControlPipe } from './access-control.pipe';\r\n\r\n@NgModule({\r\n declarations: [AccessControlDirective, ContextAwareDirective, AccessControlPipe],\r\n exports:[AccessControlDirective, ContextAwareDirective, AccessControlPipe]\r\n})\r\nexport class AccessControlModule {\r\n static forRoot(config?: AccessControlModuleConfig): ModuleWithProviders<AccessControlModule> {\r\n return {\r\n ngModule: AccessControlModule,\r\n providers: [\r\n { provide: ACC_CUSTOMKEY, useValue: config?.contextAwareKey || null },\r\n { provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },\r\n { provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' },\r\n { provide: ACC_DEBUG_MODE, useValue: config?.debugMode || false },\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'\r\n */\r\nexport class AccessControlModuleConfig {\r\n\r\n /** Chiave custom su cui la **contextAwareDirective** si basa per controllare se l'elemento è abilitato o meno */\r\n contextAwareKey?: string;\r\n\r\n /** Condizione di default da aggiungere a ogni condizione utente. Es: 'R:Jace Admin' */\r\n defaultCondition?: string;\r\n\r\n /** Relazione logica fra la condizione di default e la condizione utente. Es: '||'. Di default viene utilizzato l'OR logico */\r\n defaultConditionLogicalOperator?: string;\r\n\r\n /** Attiva la modalità di debug per l'esposizione di messaggi significativi */\r\n debugMode?: boolean;\r\n}","//Angular\r\nimport { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot } from \"@angular/router\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n//Libs\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n//Models\r\nimport { AccessControlService } from './access-control.service';\r\n\r\n/**\r\n * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe\r\n * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:\r\n * \r\n * ```typescript\r\n * @Injectable()\r\n * export class HasAuthGuardComponent extends BaseRouterGuard {\r\n * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {\r\n * super(ms, acc, router, ts);\r\n * this.Routes = [\r\n * { route: \"page_route\", permission: \"P:perm_one\" },\r\n * { route: \"*\", permission: \"R:role_one\" }\r\n * ]\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport class AccessControlRouteGuard implements CanActivateChild {\r\n\r\n /**\r\n * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi\r\n * \r\n * @default\r\n */\r\n protected LoginRoute : string = \"login\";\r\n\r\n /**\r\n * Permette di specificare delle Route sempre consentite, anche a livello di \"Radice\". Ad esempio la Root \"test\" permetterà\r\n * l'accesso a tutte le route che anche solo iniziano per \"test\"\r\n */\r\n protected AlwaysAllowedRoots: string[] = [];\r\n \r\n /**\r\n * Lista di Route con la loro espressione di controllo per valutare i permessi\r\n */\r\n protected Routes: { route: any; permission: string; }[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgService : MessageService, private ac: AccessControlService, private router: Router) {\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n canActivateChild(route: ActivatedRouteSnapshot, _: RouterStateSnapshot): Promise<boolean> {\r\n var url = route.url.join('/');\r\n //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite\r\n if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))\r\n return Promise.resolve(false);\r\n \r\n var routeMatched: boolean = false;\r\n for (let i = 0; i < this.Routes.length; i++) {\r\n let r = this.Routes[i];\r\n //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare\r\n if (url.indexOf(r.route) != -1) {\r\n routeMatched = true;\r\n return this.handleMatch(url, r);\r\n }\r\n }\r\n //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella\r\n if (!routeMatched) {\r\n var wildcardRoute = this.Routes.find(r => r.route == \"*\");\r\n if (wildcardRoute)\r\n return this.handleMatch(url, wildcardRoute);\r\n else\r\n console.log(\"Navigaizone avvenuta su route sconosciuta: \" + url);\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private handleMatch(fromurl: string, r: any) {\r\n let identity = this.ac.Identity;\r\n\r\n if (this.ac.has(r.permission) ||\r\n (\r\n // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente\r\n // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci\r\n // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve\r\n this.ac.Initialized &&\r\n (!identity.Roles || identity.Roles.length == 0) &&\r\n (!identity.Permissions || identity.Permissions.length == 0)\r\n ))\r\n return Promise.resolve(true);\r\n else {\r\n //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione\r\n //Se ho aperto una nuova tab invece rispedisco al login\r\n if (window.history.length > 2 && this.ac.isLoggedIn()) {\r\n this.msgService.simpleError(\"Page Unauthorized\");\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n this.onRedirectInProgress();\r\n this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Callback che viene eseguito prima che la Guard reindirizzi al login\r\n */\r\n protected onRedirectInProgress() {\r\n }\r\n}","/*\r\n * Public API Surface of access-control\r\n */\r\n\r\nexport * from './lib/access-control.module';\r\nexport * from './lib/access-control.pipe';\r\nexport * from './lib/access-control.service';\r\nexport * from './lib/access-control.directive'\r\nexport * from './lib/context-aware.directive';\r\nexport * from \"./lib/models/AccessControlModuleConfig\";\r\nexport * from \"./lib/AccessControlRouteGuard\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/models/ComponentContext\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService"],"mappings":"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"}
@@ -90,14 +90,13 @@ class AccessControlService {
90
90
  // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo
91
91
  if (splits[0] == "R" || splits[0] == "!R") {
92
92
  if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
93
- debugger;
94
93
  let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
95
94
  var matches2 = tmpReplace.match(RolesPermissionsRegexp);
96
95
  matches2.forEach(t2 => {
97
96
  var splits2 = t2.split(':');
98
- if (splits2[0] == "R")
97
+ if (splits2[0] == "R" || splits2[0] == "!R")
99
98
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
100
- else if (splits2[0] == "P")
99
+ else if (splits2[0] == "P" || splits2[0] == "!P")
101
100
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
102
101
  else
103
102
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
@@ -109,14 +108,13 @@ class AccessControlService {
109
108
  }
110
109
  else if (splits[0] == "P" || splits[0] == "!P") {
111
110
  if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {
112
- debugger;
113
111
  let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`;
114
112
  var matches2 = tmpReplace.match(RolesPermissionsRegexp);
115
113
  matches2.forEach(t2 => {
116
114
  var splits2 = t2.split(':');
117
- if (splits2[0] == "R")
115
+ if (splits2[0] == "R" || splits2[0] == "!R")
118
116
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasRole('" + splits2[1].trim() + "')");
119
- else if (splits2[0] == "P")
117
+ else if (splits2[0] == "P" || splits2[0] == "!P")
120
118
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasPermission('" + splits2[1].trim() + "')");
121
119
  else
122
120
  tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith("!") ? '!' : '') + "this.hasCustom('" + splits2[1].trim() + "')");
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-access-control.mjs","sources":["../../../projects/access-control/src/lib/tokens.ts","../../../projects/access-control/src/lib/access-control.service.ts","../../../projects/access-control/src/lib/access-control.directive.ts","../../../projects/access-control/src/lib/models/ComponentContext.ts","../../../projects/access-control/src/lib/context-aware.directive.ts","../../../projects/access-control/src/lib/access-control.pipe.ts","../../../projects/access-control/src/lib/access-control.module.ts","../../../projects/access-control/src/lib/models/AccessControlModuleConfig.ts","../../../projects/access-control/src/lib/AccessControlRouteGuard.ts","../../../projects/access-control/src/public-api.ts","../../../projects/access-control/src/esfaenza-access-control.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che racchiude la chiave custom da controllare quando si effettuano controlli sul ComponentContext */\r\nexport const ACC_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACC_CUSTOMKEY');\r\n\r\n/** Token che indica la condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND');\r\n\r\n/** Token che indica l'operatore della condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND_OP: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND_OP');\r\n\r\n/** Modalità di Debug */\r\nexport const ACC_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('ACC_DEBUG_MODE');","// Angular\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { ACC_DEF_COND, ACC_DEF_COND_OP } from \"./tokens\";\r\n\r\n/**\r\n * Entrypoint di tutte le operazioni esposte dalla libreria access-control\r\n */\r\n@Injectable({providedIn: \"root\"})\r\nexport class AccessControlService {\r\n\r\n /**\r\n * Indica se l'Identity è stata inizializzata\r\n */\r\n public Initialized: boolean = false;\r\n\r\n /**\r\n * Indica se sono state effettuate inizializzazioni di Custom Permissions\r\n */\r\n public InitializedCustom: boolean = false;\r\n\r\n /** @ignore */\r\n private cache: {} = {};\r\n\r\n /** @ignore */\r\n private taggedItemsCache: { key: string, items: string[] }[] = [];\r\n\r\n /**\r\n * Identity associata a quest'istanza del Servizio Access Control, utile se si vuole avere accesso a Ruoli e Permessi direttamente da qui, per qualsivoglia motivo\r\n */\r\n public Identity: { Roles: string[], Permissions: string[] };\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(ACC_DEF_COND) private ACC_DEF_COND: string, @Optional() @Inject(ACC_DEF_COND_OP) private ACC_DEF_COND_OP: string,) { }\r\n\r\n /**\r\n * Inizializza l'Identity del servizio con il modello specificato\r\n * \r\n * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi\r\n */\r\n public initializeIdentity(identity: { Roles: string[], Permissions: string[] }) {\r\n this.Identity = identity;\r\n this.Initialized = true;\r\n }\r\n\r\n /**\r\n * Inizializza i permessi Custom del servizio con il modello specificato\r\n * \r\n * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom\r\n */\r\n public initializeCustomPermissions(customPermissions: { key: string, items: string[] }[]) {\r\n for (let i = 0; i < customPermissions.length; i++) {\r\n if (customPermissions[i].key.length > 1) {\r\n console.error(\"[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.\");\r\n return;\r\n }\r\n }\r\n\r\n this.taggedItemsCache = customPermissions;\r\n this.InitializedCustom = true;\r\n }\r\n\r\n /**\r\n * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity\r\n */\r\n public isLoggedIn() {\r\n return !!this.Identity;\r\n }\r\n\r\n /**\r\n * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)\r\n * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P\r\n * \r\n * @ignore\r\n */\r\n private hasACExpression(expression: string, absolute: boolean = false): boolean {\r\n if (!this.Initialized)\r\n console.error(\"Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service\");\r\n\r\n if (!expression)\r\n return true;\r\n\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n\r\n // Espressione già valutata, non serve rivalutarla\r\n if (this.cache[expression])\r\n return this.cache[expression];\r\n\r\n var RolesPermissionsRegexp = /!?.:[^|&()]+/g;\r\n\r\n var matches = expression.match(RolesPermissionsRegexp);\r\n\r\n if (!matches)\r\n throw \"Espressione Access Control non valida: \" + expression + \". Assicurarsi che sia scritta in modo corretto\";\r\n\r\n matches.forEach(t => {\r\n var splits = t.split(':');\r\n // Per ruoli e permessi, se ho condizioni di default e l'espressione non è assoluta, wrappo ogni elemento con le espressioni di default\r\n // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo\r\n if (splits[0] == \"R\" || splits[0] == \"!R\") {\r\n if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {\r\n debugger;\r\n let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`\r\n var matches2 = tmpReplace.match(RolesPermissionsRegexp);\r\n\r\n matches2.forEach(t2 => {\r\n var splits2 = t2.split(':');\r\n if (splits2[0] == \"R\") \r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits2[1].trim() + \"')\");\r\n else if(splits2[0] == \"P\")\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits2[1].trim() + \"')\");\r\n else\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits2[1].trim() + \"')\");\r\n });\r\n expression = expression.replace(t.trim(), tmpReplace);\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits[1].trim() + \"')\");\r\n }\r\n else if (splits[0] == \"P\" || splits[0] == \"!P\") {\r\n if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {\r\n debugger;\r\n let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`\r\n var matches2 = tmpReplace.match(RolesPermissionsRegexp);\r\n\r\n matches2.forEach(t2 => {\r\n var splits2 = t2.split(':');\r\n if (splits2[0] == \"R\") \r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits2[1].trim() + \"')\");\r\n else if(splits2[0] == \"P\")\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits2[1].trim() + \"')\");\r\n else\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits2[1].trim() + \"')\");\r\n });\r\n expression = expression.replace(t.trim(), tmpReplace);\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits[1].trim() + \"')\");\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits[1].trim() + \"', '\" + ((t.startsWith(\"!\") ? splits[0].trim().charAt(1) : splits[0].trim())) + \"')\");\r\n });\r\n\r\n var ret = <boolean>eval(expression);\r\n // Cache valore\r\n this.cache[expression] = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasRole(role: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasPermission(permission: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasCustom(value: string, tag: string): boolean {\r\n var items = this.taggedItemsCache.find(t => t.key == tag)?.items;\r\n if (!items)\r\n return true;\r\n else if (items.length == 0)\r\n return false;\r\n else\r\n return !!items.find(t => t == value);\r\n }\r\n\r\n /**\r\n * Entry point che controlla un'espressione identificante un permesso, ad esempio \"P:visualizzazione\" controlla che l'utente collegato abbia un permesso che si chiama \"visualizzazione\"\r\n */\r\n public has(expr: string, absolute: boolean = false) {\r\n return this.hasACExpression(expr, absolute);\r\n }\r\n}","// Angular\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Direttiva che permette di gestire il controllo accessi su componenti HTML. \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Directive({\r\n selector: '[ac]',\r\n})\r\nexport class AccessControlDirective {\r\n \r\n /** \r\n * Espressione da processare scritta come {Chiave}:{Valore}\r\n * \r\n * Le {Chiave} disponibili sono di default \"R\" per i ruoli e \"P\" per i permessi. È possibile espanderle con le Custom Permissions.\r\n * \r\n * Nelle ultime versioni del template è anche presente di default la custom permission \"X\" che indica se l'applicaizone è Esterna o no\r\n */\r\n @Input() ac : string = null;\r\n\r\n /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */\r\n @Input() acAbsolute: boolean = false;\r\n\r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private _ac: AccessControlService) { }\r\n\r\n\r\n ngOnInit(){\r\n var allow = this._ac.has(this.ac, this.acAbsolute);\r\n\r\n //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template\r\n\r\n if (allow) this.viewContainer.createEmbeddedView(this.templateRef);\r\n else this.viewContainer.clear();\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale\r\n */\r\n@Injectable()\r\nexport class ComponentContext{\r\n /**\r\n * Nome del Contesto assegnato al Componente\r\n */\r\n name : string;\r\n}","// Angular\r\nimport { Directive, ElementRef, Optional, Inject } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\nimport { ACC_CUSTOMKEY } from \"./tokens\"\r\n\r\n// Classi\r\nimport { ComponentContext } from \"./models/ComponentContext\";\r\n\r\n/**\r\n * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.\r\n * \r\n * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext\r\n */\r\n@Directive({\r\n selector: '[contextAware]',\r\n})\r\nexport class ContextAwareDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(element: ElementRef, @Optional() private context: ComponentContext, private ac: AccessControlService, @Optional() @Inject(ACC_CUSTOMKEY) private ACC_CUSTOMKEY: string) {\r\n var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + \":\" + this.context.name,);\r\n\r\n if (!allow)\r\n element.nativeElement.setAttribute(\"enabled\", \"true\");\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Pipe che restituisce **true** quando il controllo sugli accessi ha successo, false altrimenti \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Pipe({ name: 'ac' })\r\nexport class AccessControlPipe implements PipeTransform {\r\n\r\n\r\n /** @ignore Costruttore */\r\n constructor(private _ac: AccessControlService) { }\r\n\r\n /**\r\n * Trasforma l'espressione ac in un booleano\r\n * @param value Espressione ac\r\n * @param absolute Indica se valutare **ac** in maniera assoluta o meno\r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n transform(value: string, absolute?: boolean) {\r\n return this._ac.has(value, absolute);\r\n }\r\n}","\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ACC_CUSTOMKEY, ACC_DEBUG_MODE, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';\r\n\r\nimport { AccessControlModuleConfig } from './models/AccessControlModuleConfig';\r\nimport { AccessControlDirective } from './access-control.directive';\r\nimport { ContextAwareDirective } from './context-aware.directive';\r\nimport { AccessControlPipe } from './access-control.pipe';\r\n\r\n@NgModule({\r\n declarations: [AccessControlDirective, ContextAwareDirective, AccessControlPipe],\r\n exports:[AccessControlDirective, ContextAwareDirective, AccessControlPipe]\r\n})\r\nexport class AccessControlModule {\r\n static forRoot(config?: AccessControlModuleConfig): ModuleWithProviders<AccessControlModule> {\r\n return {\r\n ngModule: AccessControlModule,\r\n providers: [\r\n { provide: ACC_CUSTOMKEY, useValue: config?.contextAwareKey || null },\r\n { provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },\r\n { provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' },\r\n { provide: ACC_DEBUG_MODE, useValue: config?.debugMode || false },\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'\r\n */\r\nexport class AccessControlModuleConfig {\r\n\r\n /** Chiave custom su cui la **contextAwareDirective** si basa per controllare se l'elemento è abilitato o meno */\r\n contextAwareKey?: string;\r\n\r\n /** Condizione di default da aggiungere a ogni condizione utente. Es: 'R:Jace Admin' */\r\n defaultCondition?: string;\r\n\r\n /** Relazione logica fra la condizione di default e la condizione utente. Es: '||'. Di default viene utilizzato l'OR logico */\r\n defaultConditionLogicalOperator?: string;\r\n\r\n /** Attiva la modalità di debug per l'esposizione di messaggi significativi */\r\n debugMode?: boolean;\r\n}","//Angular\r\nimport { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot } from \"@angular/router\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n//Libs\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n//Models\r\nimport { AccessControlService } from './access-control.service';\r\n\r\n/**\r\n * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe\r\n * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:\r\n * \r\n * ```typescript\r\n * @Injectable()\r\n * export class HasAuthGuardComponent extends BaseRouterGuard {\r\n * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {\r\n * super(ms, acc, router, ts);\r\n * this.Routes = [\r\n * { route: \"page_route\", permission: \"P:perm_one\" },\r\n * { route: \"*\", permission: \"R:role_one\" }\r\n * ]\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport class AccessControlRouteGuard implements CanActivateChild {\r\n\r\n /**\r\n * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi\r\n * \r\n * @default\r\n */\r\n protected LoginRoute : string = \"login\";\r\n\r\n /**\r\n * Permette di specificare delle Route sempre consentite, anche a livello di \"Radice\". Ad esempio la Root \"test\" permetterà\r\n * l'accesso a tutte le route che anche solo iniziano per \"test\"\r\n */\r\n protected AlwaysAllowedRoots: string[] = [];\r\n \r\n /**\r\n * Lista di Route con la loro espressione di controllo per valutare i permessi\r\n */\r\n protected Routes: { route: any; permission: string; }[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgService : MessageService, private ac: AccessControlService, private router: Router) {\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n canActivateChild(route: ActivatedRouteSnapshot, _: RouterStateSnapshot): Promise<boolean> {\r\n var url = route.url.join('/');\r\n //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite\r\n if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))\r\n return Promise.resolve(false);\r\n \r\n var routeMatched: boolean = false;\r\n for (let i = 0; i < this.Routes.length; i++) {\r\n let r = this.Routes[i];\r\n //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare\r\n if (url.indexOf(r.route) != -1) {\r\n routeMatched = true;\r\n return this.handleMatch(url, r);\r\n }\r\n }\r\n //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella\r\n if (!routeMatched) {\r\n var wildcardRoute = this.Routes.find(r => r.route == \"*\");\r\n if (wildcardRoute)\r\n return this.handleMatch(url, wildcardRoute);\r\n else\r\n console.log(\"Navigaizone avvenuta su route sconosciuta: \" + url);\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private handleMatch(fromurl: string, r: any) {\r\n let identity = this.ac.Identity;\r\n\r\n if (this.ac.has(r.permission) ||\r\n (\r\n // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente\r\n // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci\r\n // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve\r\n this.ac.Initialized &&\r\n (!identity.Roles || identity.Roles.length == 0) &&\r\n (!identity.Permissions || identity.Permissions.length == 0)\r\n ))\r\n return Promise.resolve(true);\r\n else {\r\n //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione\r\n //Se ho aperto una nuova tab invece rispedisco al login\r\n if (window.history.length > 2 && this.ac.isLoggedIn()) {\r\n this.msgService.simpleError(\"Page Unauthorized\");\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n this.onRedirectInProgress();\r\n this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Callback che viene eseguito prima che la Guard reindirizzi al login\r\n */\r\n protected onRedirectInProgress() {\r\n }\r\n}","/*\r\n * Public API Surface of access-control\r\n */\r\n\r\nexport * from './lib/access-control.module';\r\nexport * from './lib/access-control.pipe';\r\nexport * from './lib/access-control.service';\r\nexport * from './lib/access-control.directive'\r\nexport * from './lib/context-aware.directive';\r\nexport * from \"./lib/models/AccessControlModuleConfig\";\r\nexport * from \"./lib/AccessControlRouteGuard\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/models/ComponentContext\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-access-control.mjs","sources":["../../../projects/access-control/src/lib/tokens.ts","../../../projects/access-control/src/lib/access-control.service.ts","../../../projects/access-control/src/lib/access-control.directive.ts","../../../projects/access-control/src/lib/models/ComponentContext.ts","../../../projects/access-control/src/lib/context-aware.directive.ts","../../../projects/access-control/src/lib/access-control.pipe.ts","../../../projects/access-control/src/lib/access-control.module.ts","../../../projects/access-control/src/lib/models/AccessControlModuleConfig.ts","../../../projects/access-control/src/lib/AccessControlRouteGuard.ts","../../../projects/access-control/src/public-api.ts","../../../projects/access-control/src/esfaenza-access-control.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che racchiude la chiave custom da controllare quando si effettuano controlli sul ComponentContext */\r\nexport const ACC_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACC_CUSTOMKEY');\r\n\r\n/** Token che indica la condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND');\r\n\r\n/** Token che indica l'operatore della condizione di default da aggiungere ai check utente */\r\nexport const ACC_DEF_COND_OP: InjectionToken<string> = new InjectionToken<string>('ACC_DEF_COND_OP');\r\n\r\n/** Modalità di Debug */\r\nexport const ACC_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('ACC_DEBUG_MODE');","// Angular\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { ACC_DEF_COND, ACC_DEF_COND_OP } from \"./tokens\";\r\n\r\n/**\r\n * Entrypoint di tutte le operazioni esposte dalla libreria access-control\r\n */\r\n@Injectable({providedIn: \"root\"})\r\nexport class AccessControlService {\r\n\r\n /**\r\n * Indica se l'Identity è stata inizializzata\r\n */\r\n public Initialized: boolean = false;\r\n\r\n /**\r\n * Indica se sono state effettuate inizializzazioni di Custom Permissions\r\n */\r\n public InitializedCustom: boolean = false;\r\n\r\n /** @ignore */\r\n private cache: {} = {};\r\n\r\n /** @ignore */\r\n private taggedItemsCache: { key: string, items: string[] }[] = [];\r\n\r\n /**\r\n * Identity associata a quest'istanza del Servizio Access Control, utile se si vuole avere accesso a Ruoli e Permessi direttamente da qui, per qualsivoglia motivo\r\n */\r\n public Identity: { Roles: string[], Permissions: string[] };\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(ACC_DEF_COND) private ACC_DEF_COND: string, @Optional() @Inject(ACC_DEF_COND_OP) private ACC_DEF_COND_OP: string,) { }\r\n\r\n /**\r\n * Inizializza l'Identity del servizio con il modello specificato\r\n * \r\n * @params {{ Roles: string[], Permissions: string[] }} identity Identità applicativa con ruoli e permessi\r\n */\r\n public initializeIdentity(identity: { Roles: string[], Permissions: string[] }) {\r\n this.Identity = identity;\r\n this.Initialized = true;\r\n }\r\n\r\n /**\r\n * Inizializza i permessi Custom del servizio con il modello specificato\r\n * \r\n * @param {{ key: string, items: string[] }[]} customPermissions Permessi Custom\r\n */\r\n public initializeCustomPermissions(customPermissions: { key: string, items: string[] }[]) {\r\n for (let i = 0; i < customPermissions.length; i++) {\r\n if (customPermissions[i].key.length > 1) {\r\n console.error(\"[@esfaenza/access-control] Custom permission initialized with keys longer than a single characters. Ignoring EVERYTHING.\");\r\n return;\r\n }\r\n }\r\n\r\n this.taggedItemsCache = customPermissions;\r\n this.InitializedCustom = true;\r\n }\r\n\r\n /**\r\n * Indica se nella sessione attuale esiste un utente loggato. Fa un semplice controllo di presenza sull'Identity\r\n */\r\n public isLoggedIn() {\r\n return !!this.Identity;\r\n }\r\n\r\n /**\r\n * Expression è scritta tipo --> R:Role1 && P:Permission1 || (R:Role2 && P:Permission1)\r\n * Quindi piuttosto che implementarsi un parser della madonna in stile Alessandro prendo la strada stronza e veloce con l'eval :P\r\n * \r\n * @ignore\r\n */\r\n private hasACExpression(expression: string, absolute: boolean = false): boolean {\r\n if (!this.Initialized)\r\n console.error(\"Access Control System has not been initialized. Call this.accessControl.initialize(..., ...) before using the service\");\r\n\r\n if (!expression)\r\n return true;\r\n\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n\r\n // Espressione già valutata, non serve rivalutarla\r\n if (this.cache[expression])\r\n return this.cache[expression];\r\n\r\n var RolesPermissionsRegexp = /!?.:[^|&()]+/g;\r\n\r\n var matches = expression.match(RolesPermissionsRegexp);\r\n\r\n if (!matches)\r\n throw \"Espressione Access Control non valida: \" + expression + \". Assicurarsi che sia scritta in modo corretto\";\r\n\r\n matches.forEach(t => {\r\n var splits = t.split(':');\r\n // Per ruoli e permessi, se ho condizioni di default e l'espressione non è assoluta, wrappo ogni elemento con le espressioni di default\r\n // Per le custom permissions invece, dato che sono cose staccate da ruoli e permessi, non ha mai senso farlo\r\n if (splits[0] == \"R\" || splits[0] == \"!R\") {\r\n if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {\r\n let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`\r\n var matches2 = tmpReplace.match(RolesPermissionsRegexp);\r\n\r\n matches2.forEach(t2 => {\r\n var splits2 = t2.split(':');\r\n if (splits2[0] == \"R\" || splits2[0] == \"!R\") \r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits2[1].trim() + \"')\");\r\n else if(splits2[0] == \"P\" || splits2[0] == \"!P\")\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits2[1].trim() + \"')\");\r\n else\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits2[1].trim() + \"')\");\r\n });\r\n expression = expression.replace(t.trim(), tmpReplace);\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits[1].trim() + \"')\");\r\n }\r\n else if (splits[0] == \"P\" || splits[0] == \"!P\") {\r\n if (this.ACC_DEF_COND && this.ACC_DEF_COND_OP && !absolute) {\r\n let tmpReplace = `(${t} ${this.ACC_DEF_COND_OP} ${this.ACC_DEF_COND})`\r\n var matches2 = tmpReplace.match(RolesPermissionsRegexp);\r\n\r\n matches2.forEach(t2 => {\r\n var splits2 = t2.split(':');\r\n if (splits2[0] == \"R\" || splits2[0] == \"!R\") \r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasRole('\" + splits2[1].trim() + \"')\");\r\n else if(splits2[0] == \"P\" || splits2[0] == \"!P\")\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits2[1].trim() + \"')\");\r\n else\r\n tmpReplace = tmpReplace.replace(t2.trim(), (t2.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits2[1].trim() + \"')\");\r\n });\r\n expression = expression.replace(t.trim(), tmpReplace);\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasPermission('\" + splits[1].trim() + \"')\");\r\n }\r\n else\r\n expression = expression.replace(t.trim(), (t.startsWith(\"!\") ? '!' : '') + \"this.hasCustom('\" + splits[1].trim() + \"', '\" + ((t.startsWith(\"!\") ? splits[0].trim().charAt(1) : splits[0].trim())) + \"')\");\r\n });\r\n\r\n var ret = <boolean>eval(expression);\r\n // Cache valore\r\n this.cache[expression] = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasRole(role: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Roles && this.Identity.Roles.length > 0 && this.Identity.Roles.indexOf(role) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasPermission(permission: string): boolean {\r\n if (!this.Identity) {\r\n console.warn(\"Elemento Identity non specificato in Access Control. Gli accessi saranno tutti liberi di default\")\r\n return true;\r\n }\r\n return this.Identity.Permissions && this.Identity.Permissions.length > 0 && this.Identity.Permissions.indexOf(permission) != -1;\r\n }\r\n\r\n /**\r\n * Utilizzato da hasACExpression dentro eval\r\n * \r\n * @ignore\r\n */\r\n private hasCustom(value: string, tag: string): boolean {\r\n var items = this.taggedItemsCache.find(t => t.key == tag)?.items;\r\n if (!items)\r\n return true;\r\n else if (items.length == 0)\r\n return false;\r\n else\r\n return !!items.find(t => t == value);\r\n }\r\n\r\n /**\r\n * Entry point che controlla un'espressione identificante un permesso, ad esempio \"P:visualizzazione\" controlla che l'utente collegato abbia un permesso che si chiama \"visualizzazione\"\r\n */\r\n public has(expr: string, absolute: boolean = false) {\r\n return this.hasACExpression(expr, absolute);\r\n }\r\n}","// Angular\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Direttiva che permette di gestire il controllo accessi su componenti HTML. \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Directive({\r\n selector: '[ac]',\r\n})\r\nexport class AccessControlDirective {\r\n \r\n /** \r\n * Espressione da processare scritta come {Chiave}:{Valore}\r\n * \r\n * Le {Chiave} disponibili sono di default \"R\" per i ruoli e \"P\" per i permessi. È possibile espanderle con le Custom Permissions.\r\n * \r\n * Nelle ultime versioni del template è anche presente di default la custom permission \"X\" che indica se l'applicaizone è Esterna o no\r\n */\r\n @Input() ac : string = null;\r\n\r\n /** Indica che l'esporessione **ac** è assoluta, cioè che non può essere modificata internamente ad esempio per aggiungere condizioni di default */\r\n @Input() acAbsolute: boolean = false;\r\n\r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef, private _ac: AccessControlService) { }\r\n\r\n\r\n ngOnInit(){\r\n var allow = this._ac.has(this.ac, this.acAbsolute);\r\n\r\n //Se ho i permessi, proseguo creando la vista nel DOM, altrimenti rimuovo il template\r\n\r\n if (allow) this.viewContainer.createEmbeddedView(this.templateRef);\r\n else this.viewContainer.clear();\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Token da iniettare per ogni singolo componente per cui si vuole disattivare/attivare massivamente degli input in maniera contestuale\r\n */\r\n@Injectable()\r\nexport class ComponentContext{\r\n /**\r\n * Nome del Contesto assegnato al Componente\r\n */\r\n name : string;\r\n}","// Angular\r\nimport { Directive, ElementRef, Optional, Inject } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\nimport { ACC_CUSTOMKEY } from \"./tokens\"\r\n\r\n// Classi\r\nimport { ComponentContext } from \"./models/ComponentContext\";\r\n\r\n/**\r\n * Direttiva che permette di capire se l'elemento HTML su cui è utilizzata dev'essere disabilitato o no.\r\n * \r\n * Non ha effetto sugli elementi dichiarati in componenti che non dichiarano alcun ComponentContext\r\n */\r\n@Directive({\r\n selector: '[contextAware]',\r\n})\r\nexport class ContextAwareDirective {\r\n \r\n /**\r\n * Costruttore \r\n * \r\n * @ignore\r\n */\r\n constructor(element: ElementRef, @Optional() private context: ComponentContext, private ac: AccessControlService, @Optional() @Inject(ACC_CUSTOMKEY) private ACC_CUSTOMKEY: string) {\r\n var allow = !this.context || !this.context.name || !this.ACC_CUSTOMKEY || this.ac.has(this.ACC_CUSTOMKEY + \":\" + this.context.name,);\r\n\r\n if (!allow)\r\n element.nativeElement.setAttribute(\"enabled\", \"true\");\r\n }\r\n}","// Angular\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService } from \"./access-control.service\";\r\n\r\n/**\r\n * Pipe che restituisce **true** quando il controllo sugli accessi ha successo, false altrimenti \r\n * \r\n * Per gli esempi di utilizzo fare riferimento al README.\r\n */\r\n@Pipe({ name: 'ac' })\r\nexport class AccessControlPipe implements PipeTransform {\r\n\r\n\r\n /** @ignore Costruttore */\r\n constructor(private _ac: AccessControlService) { }\r\n\r\n /**\r\n * Trasforma l'espressione ac in un booleano\r\n * @param value Espressione ac\r\n * @param absolute Indica se valutare **ac** in maniera assoluta o meno\r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n transform(value: string, absolute?: boolean) {\r\n return this._ac.has(value, absolute);\r\n }\r\n}","\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ACC_CUSTOMKEY, ACC_DEBUG_MODE, ACC_DEF_COND, ACC_DEF_COND_OP } from './tokens';\r\n\r\nimport { AccessControlModuleConfig } from './models/AccessControlModuleConfig';\r\nimport { AccessControlDirective } from './access-control.directive';\r\nimport { ContextAwareDirective } from './context-aware.directive';\r\nimport { AccessControlPipe } from './access-control.pipe';\r\n\r\n@NgModule({\r\n declarations: [AccessControlDirective, ContextAwareDirective, AccessControlPipe],\r\n exports:[AccessControlDirective, ContextAwareDirective, AccessControlPipe]\r\n})\r\nexport class AccessControlModule {\r\n static forRoot(config?: AccessControlModuleConfig): ModuleWithProviders<AccessControlModule> {\r\n return {\r\n ngModule: AccessControlModule,\r\n providers: [\r\n { provide: ACC_CUSTOMKEY, useValue: config?.contextAwareKey || null },\r\n { provide: ACC_DEF_COND, useValue: config?.defaultCondition || null },\r\n { provide: ACC_DEF_COND_OP, useValue: config?.defaultConditionLogicalOperator || '||' },\r\n { provide: ACC_DEBUG_MODE, useValue: config?.debugMode || false },\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Configurazione Modulo AccessControl. Se non fornita verrà generata automaticamente con locale 'it-IT'\r\n */\r\nexport class AccessControlModuleConfig {\r\n\r\n /** Chiave custom su cui la **contextAwareDirective** si basa per controllare se l'elemento è abilitato o meno */\r\n contextAwareKey?: string;\r\n\r\n /** Condizione di default da aggiungere a ogni condizione utente. Es: 'R:Jace Admin' */\r\n defaultCondition?: string;\r\n\r\n /** Relazione logica fra la condizione di default e la condizione utente. Es: '||'. Di default viene utilizzato l'OR logico */\r\n defaultConditionLogicalOperator?: string;\r\n\r\n /** Attiva la modalità di debug per l'esposizione di messaggi significativi */\r\n debugMode?: boolean;\r\n}","//Angular\r\nimport { ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot } from \"@angular/router\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n//Libs\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n//Models\r\nimport { AccessControlService } from './access-control.service';\r\n\r\n/**\r\n * Router Guard base per proteggere l'accesso alle route dell'applicazione. Per utilizzarla è sufficiente ereditarla e, nel costruttore della classe\r\n * che la ereditavalorizzare la variabile Routes con le route permesse dal modulo e il permesso per cui si vuole riservare l'accesso. Ad esempio:\r\n * \r\n * ```typescript\r\n * @Injectable()\r\n * export class HasAuthGuardComponent extends BaseRouterGuard {\r\n * constructor(acc: AccessControlService, router: Router, ms: MessageService, ts: BaseTokenService) {\r\n * super(ms, acc, router, ts);\r\n * this.Routes = [\r\n * { route: \"page_route\", permission: \"P:perm_one\" },\r\n * { route: \"*\", permission: \"R:role_one\" }\r\n * ]\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport class AccessControlRouteGuard implements CanActivateChild {\r\n\r\n /**\r\n * Route di login che serve per reindirizzare alla pagina di login in caso di fallimento del controllo sui Permessi\r\n * \r\n * @default\r\n */\r\n protected LoginRoute : string = \"login\";\r\n\r\n /**\r\n * Permette di specificare delle Route sempre consentite, anche a livello di \"Radice\". Ad esempio la Root \"test\" permetterà\r\n * l'accesso a tutte le route che anche solo iniziano per \"test\"\r\n */\r\n protected AlwaysAllowedRoots: string[] = [];\r\n \r\n /**\r\n * Lista di Route con la loro espressione di controllo per valutare i permessi\r\n */\r\n protected Routes: { route: any; permission: string; }[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(private msgService : MessageService, private ac: AccessControlService, private router: Router) {\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n canActivateChild(route: ActivatedRouteSnapshot, _: RouterStateSnapshot): Promise<boolean> {\r\n var url = route.url.join('/');\r\n //Se l'applicazione non è pronta e non sto navigando nelle pagine consentite\r\n if (!this.ac.Initialized && !this.AlwaysAllowedRoots.find(r => url.indexOf(r) != -1))\r\n return Promise.resolve(false);\r\n \r\n var routeMatched: boolean = false;\r\n for (let i = 0; i < this.Routes.length; i++) {\r\n let r = this.Routes[i];\r\n //Se faccio match con la route significa che ho navigato in una delle route conosciute, altrimenti avverto ma lascio andare\r\n if (url.indexOf(r.route) != -1) {\r\n routeMatched = true;\r\n return this.handleMatch(url, r);\r\n }\r\n }\r\n //Se non faccio nessun match ma ho una route wildcard (*) prendo quella e controllo su quella\r\n if (!routeMatched) {\r\n var wildcardRoute = this.Routes.find(r => r.route == \"*\");\r\n if (wildcardRoute)\r\n return this.handleMatch(url, wildcardRoute);\r\n else\r\n console.log(\"Navigaizone avvenuta su route sconosciuta: \" + url);\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private handleMatch(fromurl: string, r: any) {\r\n let identity = this.ac.Identity;\r\n\r\n if (this.ac.has(r.permission) ||\r\n (\r\n // Considero anche la possibilità di avere l'access control inizializzato ma che l'account scope non sia ancora presente\r\n // in questo caso suppongo sia un hard refresh e mi fido del fatto che l'utente possa entrarci\r\n // TODO: Fixare meglio concatenando una promise che va a prendere l'account scope se serve\r\n this.ac.Initialized &&\r\n (!identity.Roles || identity.Roles.length == 0) &&\r\n (!identity.Permissions || identity.Permissions.length == 0)\r\n ))\r\n return Promise.resolve(true);\r\n else {\r\n //Se sono nel sito originale (non ho aperto un newtab) blocco la navigazione\r\n //Se ho aperto una nuova tab invece rispedisco al login\r\n if (window.history.length > 2 && this.ac.isLoggedIn()) {\r\n this.msgService.simpleError(\"Page Unauthorized\");\r\n return Promise.resolve(false);\r\n }\r\n else {\r\n this.onRedirectInProgress();\r\n this.router.navigate([this.LoginRoute, { fromUrl: fromurl }]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Callback che viene eseguito prima che la Guard reindirizzi al login\r\n */\r\n protected onRedirectInProgress() {\r\n }\r\n}","/*\r\n * Public API Surface of access-control\r\n */\r\n\r\nexport * from './lib/access-control.module';\r\nexport * from './lib/access-control.pipe';\r\nexport * from './lib/access-control.service';\r\nexport * from './lib/access-control.directive'\r\nexport * from './lib/context-aware.directive';\r\nexport * from \"./lib/models/AccessControlModuleConfig\";\r\nexport * from \"./lib/AccessControlRouteGuard\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/models/ComponentContext\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AccessControlService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/access-control",
3
- "version": "15.2.9",
3
+ "version": "15.2.10",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },