@arikajs/authorization 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +173 -78
  2. package/dist/AuthResponse.d.ts +23 -0
  3. package/dist/AuthResponse.d.ts.map +1 -0
  4. package/dist/AuthResponse.js +40 -0
  5. package/dist/AuthResponse.js.map +1 -0
  6. package/dist/AuthorizationContext.d.ts +31 -0
  7. package/dist/AuthorizationContext.d.ts.map +1 -0
  8. package/dist/AuthorizationContext.js +87 -0
  9. package/dist/AuthorizationContext.js.map +1 -0
  10. package/dist/AuthorizationManager.d.ts +15 -7
  11. package/dist/AuthorizationManager.d.ts.map +1 -1
  12. package/dist/AuthorizationManager.js +46 -12
  13. package/dist/AuthorizationManager.js.map +1 -1
  14. package/dist/Exceptions/AuthorizationException.d.ts +2 -1
  15. package/dist/Exceptions/AuthorizationException.d.ts.map +1 -1
  16. package/dist/Exceptions/AuthorizationException.js +2 -1
  17. package/dist/Exceptions/AuthorizationException.js.map +1 -1
  18. package/dist/Gate.d.ts +39 -3
  19. package/dist/Gate.d.ts.map +1 -1
  20. package/dist/Gate.js +121 -14
  21. package/dist/Gate.js.map +1 -1
  22. package/dist/Middleware/Authorize.d.ts +5 -4
  23. package/dist/Middleware/Authorize.d.ts.map +1 -1
  24. package/dist/Middleware/Authorize.js +24 -6
  25. package/dist/Middleware/Authorize.js.map +1 -1
  26. package/dist/PolicyResolver.d.ts +7 -2
  27. package/dist/PolicyResolver.d.ts.map +1 -1
  28. package/dist/PolicyResolver.js +26 -4
  29. package/dist/PolicyResolver.js.map +1 -1
  30. package/dist/RolePermission.d.ts +36 -0
  31. package/dist/RolePermission.d.ts.map +1 -0
  32. package/dist/RolePermission.js +59 -0
  33. package/dist/RolePermission.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/src/AuthResponse.d.ts +23 -0
  39. package/dist/src/AuthResponse.d.ts.map +1 -0
  40. package/dist/src/AuthResponse.js +40 -0
  41. package/dist/src/AuthResponse.js.map +1 -0
  42. package/dist/src/AuthorizationContext.d.ts +31 -0
  43. package/dist/src/AuthorizationContext.d.ts.map +1 -0
  44. package/dist/src/AuthorizationContext.js +87 -0
  45. package/dist/src/AuthorizationContext.js.map +1 -0
  46. package/dist/src/AuthorizationManager.d.ts +25 -0
  47. package/dist/src/AuthorizationManager.d.ts.map +1 -0
  48. package/dist/src/AuthorizationManager.js +64 -0
  49. package/dist/src/AuthorizationManager.js.map +1 -0
  50. package/dist/src/Contracts/Policy.d.ts +4 -0
  51. package/dist/src/Contracts/Policy.d.ts.map +1 -0
  52. package/dist/src/Contracts/Policy.js +3 -0
  53. package/dist/src/Contracts/Policy.js.map +1 -0
  54. package/dist/src/Exceptions/AuthorizationException.d.ts +6 -0
  55. package/dist/src/Exceptions/AuthorizationException.d.ts.map +1 -0
  56. package/dist/src/Exceptions/AuthorizationException.js +13 -0
  57. package/dist/src/Exceptions/AuthorizationException.js.map +1 -0
  58. package/dist/src/Gate.d.ts +76 -0
  59. package/dist/src/Gate.d.ts.map +1 -0
  60. package/dist/src/Gate.js +189 -0
  61. package/dist/src/Gate.js.map +1 -0
  62. package/dist/src/Middleware/Authorize.d.ts +13 -0
  63. package/dist/src/Middleware/Authorize.d.ts.map +1 -0
  64. package/dist/src/Middleware/Authorize.js +51 -0
  65. package/dist/src/Middleware/Authorize.js.map +1 -0
  66. package/dist/src/PolicyResolver.d.ts +21 -0
  67. package/dist/src/PolicyResolver.d.ts.map +1 -0
  68. package/dist/src/PolicyResolver.js +67 -0
  69. package/dist/src/PolicyResolver.js.map +1 -0
  70. package/dist/src/RolePermission.d.ts +36 -0
  71. package/dist/src/RolePermission.d.ts.map +1 -0
  72. package/dist/src/RolePermission.js +59 -0
  73. package/dist/src/RolePermission.js.map +1 -0
  74. package/dist/src/index.d.ts +10 -0
  75. package/dist/src/index.d.ts.map +1 -0
  76. package/dist/src/index.js +26 -0
  77. package/dist/src/index.js.map +1 -0
  78. package/dist/tests/Authorization.test.d.ts +2 -0
  79. package/dist/tests/Authorization.test.d.ts.map +1 -0
  80. package/dist/tests/Authorization.test.js +236 -0
  81. package/dist/tests/Authorization.test.js.map +1 -0
  82. package/package.json +44 -42
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * Contracts for entities that have roles and permissions.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RolePermissionMixin = void 0;
7
+ /**
8
+ * Mixin helper to add Role & Permission checking to any user object.
9
+ * Works with both string arrays and object arrays ({name: string}).
10
+ */
11
+ class RolePermissionMixin {
12
+ /**
13
+ * Normalize roles/permissions to string arrays.
14
+ */
15
+ static normalize(items) {
16
+ if (!items)
17
+ return [];
18
+ return items.map((item) => typeof item === 'string' ? item : item.name);
19
+ }
20
+ static hasRole(user, role) {
21
+ const userRoles = this.normalize(user.roles);
22
+ if (Array.isArray(role)) {
23
+ return role.every(r => userRoles.includes(r));
24
+ }
25
+ return userRoles.includes(role);
26
+ }
27
+ static hasAnyRole(user, roles) {
28
+ const userRoles = this.normalize(user.roles);
29
+ return roles.some(r => userRoles.includes(r));
30
+ }
31
+ static hasAllRoles(user, roles) {
32
+ const userRoles = this.normalize(user.roles);
33
+ return roles.every(r => userRoles.includes(r));
34
+ }
35
+ static hasPermission(user, permission) {
36
+ // Check direct permissions
37
+ const userPerms = this.normalize(user.permissions);
38
+ if (userPerms.includes(permission))
39
+ return true;
40
+ // Check role-based permissions via a role→permissions map if user has rolePermissions
41
+ if (user.rolePermissions && typeof user.rolePermissions === 'object') {
42
+ const userRoles = this.normalize(user.roles);
43
+ for (const role of userRoles) {
44
+ const rolePerms = user.rolePermissions[role] || [];
45
+ if (rolePerms.includes(permission))
46
+ return true;
47
+ }
48
+ }
49
+ return false;
50
+ }
51
+ static hasAnyPermission(user, permissions) {
52
+ return permissions.some(p => this.hasPermission(user, p));
53
+ }
54
+ static hasAllPermissions(user, permissions) {
55
+ return permissions.every(p => this.hasPermission(user, p));
56
+ }
57
+ }
58
+ exports.RolePermissionMixin = RolePermissionMixin;
59
+ //# sourceMappingURL=RolePermission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RolePermission.js","sourceRoot":"","sources":["../src/RolePermission.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAgBH;;;GAGG;AACH,MAAa,mBAAmB;IAE5B;;OAEG;IACK,MAAM,CAAC,SAAS,CAAC,KAAwB;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,IAAS,EAAE,IAAuB;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,IAAS,EAAE,KAAe;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,IAAS,EAAE,KAAe;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,IAAS,EAAE,UAAkB;QACrD,2BAA2B;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAEhD,sFAAsF;QACtF,IAAI,IAAI,CAAC,eAAe,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;YACnE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAa,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7D,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAAE,OAAO,IAAI,CAAC;YACpD,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,IAAS,EAAE,WAAqB;QAC3D,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,IAAS,EAAE,WAAqB;QAC5D,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;CACJ;AApDD,kDAoDC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  export * from './Gate';
2
2
  export * from './AuthorizationManager';
3
+ export * from './AuthorizationContext';
4
+ export * from './AuthResponse';
3
5
  export * from './PolicyResolver';
6
+ export * from './RolePermission';
4
7
  export * from './Contracts/Policy';
5
8
  export * from './Exceptions/AuthorizationException';
6
9
  export * from './Middleware/Authorize';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -16,7 +16,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./Gate"), exports);
18
18
  __exportStar(require("./AuthorizationManager"), exports);
19
+ __exportStar(require("./AuthorizationContext"), exports);
20
+ __exportStar(require("./AuthResponse"), exports);
19
21
  __exportStar(require("./PolicyResolver"), exports);
22
+ __exportStar(require("./RolePermission"), exports);
20
23
  __exportStar(require("./Contracts/Policy"), exports);
21
24
  __exportStar(require("./Exceptions/AuthorizationException"), exports);
22
25
  __exportStar(require("./Middleware/Authorize"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,yDAAuC;AACvC,mDAAiC;AACjC,qDAAmC;AACnC,sEAAoD;AACpD,yDAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,yDAAuC;AACvC,yDAAuC;AACvC,iDAA+B;AAC/B,mDAAiC;AACjC,mDAAiC;AACjC,qDAAmC;AACnC,sEAAoD;AACpD,yDAAuC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Represents the result of an authorization check.
3
+ * Allows gates/policies to return custom denial messages instead of just true/false.
4
+ */
5
+ export declare class AuthResponse {
6
+ private _allowed;
7
+ private _message;
8
+ private _code;
9
+ constructor(allowed: boolean, message?: string | null, code?: string | null);
10
+ allowed(): boolean;
11
+ denied(): boolean;
12
+ message(): string | null;
13
+ code(): string | null;
14
+ /**
15
+ * Create an "allow" response.
16
+ */
17
+ static allow(message?: string | null): AuthResponse;
18
+ /**
19
+ * Create a "deny" response with an optional custom message.
20
+ */
21
+ static deny(message?: string, code?: string | null): AuthResponse;
22
+ }
23
+ //# sourceMappingURL=AuthResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthResponse.d.ts","sourceRoot":"","sources":["../../src/AuthResponse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,KAAK,CAAgB;gBAEjB,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,GAAG,IAAW,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW;IAMhF,OAAO,IAAI,OAAO;IAIlB,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,IAAI,IAAI,MAAM,GAAG,IAAI;IAI5B;;OAEG;WACW,KAAK,CAAC,OAAO,GAAE,MAAM,GAAG,IAAW,GAAG,YAAY;IAIhE;;OAEG;WACW,IAAI,CAAC,OAAO,GAAE,MAAuC,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,YAAY;CAGjH"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthResponse = void 0;
4
+ /**
5
+ * Represents the result of an authorization check.
6
+ * Allows gates/policies to return custom denial messages instead of just true/false.
7
+ */
8
+ class AuthResponse {
9
+ constructor(allowed, message = null, code = null) {
10
+ this._allowed = allowed;
11
+ this._message = message;
12
+ this._code = code;
13
+ }
14
+ allowed() {
15
+ return this._allowed;
16
+ }
17
+ denied() {
18
+ return !this._allowed;
19
+ }
20
+ message() {
21
+ return this._message;
22
+ }
23
+ code() {
24
+ return this._code;
25
+ }
26
+ /**
27
+ * Create an "allow" response.
28
+ */
29
+ static allow(message = null) {
30
+ return new AuthResponse(true, message);
31
+ }
32
+ /**
33
+ * Create a "deny" response with an optional custom message.
34
+ */
35
+ static deny(message = 'This action is unauthorized.', code = null) {
36
+ return new AuthResponse(false, message, code);
37
+ }
38
+ }
39
+ exports.AuthResponse = AuthResponse;
40
+ //# sourceMappingURL=AuthResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthResponse.js","sourceRoot":"","sources":["../../src/AuthResponse.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,YAAY;IAKrB,YAAY,OAAgB,EAAE,UAAyB,IAAI,EAAE,OAAsB,IAAI;QACnF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,MAAM;QACT,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,IAAI;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,UAAyB,IAAI;QAC7C,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,IAAI,CAAC,UAAkB,8BAA8B,EAAE,OAAsB,IAAI;QAC3F,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;CACJ;AAxCD,oCAwCC"}
@@ -0,0 +1,31 @@
1
+ import { AuthResponse } from './AuthResponse';
2
+ /**
3
+ * Per-request authorization context.
4
+ * Avoids the global mutable `Gate.currentUser` problem under concurrency.
5
+ * Each request gets its own `AuthorizationContext` with an isolated user reference.
6
+ */
7
+ export declare class AuthorizationContext {
8
+ private user;
9
+ private cache;
10
+ constructor(user: any);
11
+ can(ability: string, ...args: any[]): Promise<boolean>;
12
+ cannot(ability: string, ...args: any[]): Promise<boolean>;
13
+ authorize(ability: string, ...args: any[]): Promise<void>;
14
+ inspect(ability: string, ...args: any[]): Promise<AuthResponse>;
15
+ any(abilities: string[], ...args: any[]): Promise<boolean>;
16
+ every(abilities: string[], ...args: any[]): Promise<boolean>;
17
+ none(abilities: string[], ...args: any[]): Promise<boolean>;
18
+ hasRole(role: string | string[]): boolean;
19
+ hasAnyRole(roles: string[]): boolean;
20
+ hasAllRoles(roles: string[]): boolean;
21
+ hasPermission(permission: string): boolean;
22
+ hasAnyPermission(permissions: string[]): boolean;
23
+ hasAllPermissions(permissions: string[]): boolean;
24
+ getUser(): any;
25
+ /**
26
+ * Clear the authorization cache (e.g. after role change mid-request).
27
+ */
28
+ flushCache(): void;
29
+ private buildCacheKey;
30
+ }
31
+ //# sourceMappingURL=AuthorizationContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationContext.d.ts","sourceRoot":"","sources":["../../src/AuthorizationContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;;;GAIG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,KAAK,CAAmC;gBAEpC,IAAI,EAAE,GAAG;IAMR,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAM/D,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1D,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO;IAIzC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;IAIpC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;IAIrC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI1C,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO;IAIhD,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO;IAMjD,OAAO,IAAI,GAAG;IAIrB;;OAEG;IACI,UAAU,IAAI,IAAI;IAIzB,OAAO,CAAC,aAAa;CASxB"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthorizationContext = void 0;
4
+ const Gate_1 = require("./Gate");
5
+ const RolePermission_1 = require("./RolePermission");
6
+ /**
7
+ * Per-request authorization context.
8
+ * Avoids the global mutable `Gate.currentUser` problem under concurrency.
9
+ * Each request gets its own `AuthorizationContext` with an isolated user reference.
10
+ */
11
+ class AuthorizationContext {
12
+ constructor(user) {
13
+ this.cache = new Map();
14
+ this.user = user;
15
+ }
16
+ // ── Single ability checks ───────────────────────────────────────
17
+ async can(ability, ...args) {
18
+ const cacheKey = this.buildCacheKey(ability, args);
19
+ if (this.cache.has(cacheKey)) {
20
+ return this.cache.get(cacheKey);
21
+ }
22
+ const result = await Gate_1.Gate.forUser(this.user).allows(ability, ...args);
23
+ this.cache.set(cacheKey, result);
24
+ return result;
25
+ }
26
+ async cannot(ability, ...args) {
27
+ return !(await this.can(ability, ...args));
28
+ }
29
+ async authorize(ability, ...args) {
30
+ await Gate_1.Gate.forUser(this.user).authorize(ability, ...args);
31
+ }
32
+ async inspect(ability, ...args) {
33
+ return await Gate_1.Gate.forUser(this.user).inspect(ability, ...args);
34
+ }
35
+ // ── Bulk ability checks ─────────────────────────────────────────
36
+ async any(abilities, ...args) {
37
+ return await Gate_1.Gate.forUser(this.user).any(abilities, ...args);
38
+ }
39
+ async every(abilities, ...args) {
40
+ return await Gate_1.Gate.forUser(this.user).every(abilities, ...args);
41
+ }
42
+ async none(abilities, ...args) {
43
+ return await Gate_1.Gate.forUser(this.user).none(abilities, ...args);
44
+ }
45
+ // ── Role & Permission checks (via mixin) ────────────────────────
46
+ hasRole(role) {
47
+ return RolePermission_1.RolePermissionMixin.hasRole(this.user, role);
48
+ }
49
+ hasAnyRole(roles) {
50
+ return RolePermission_1.RolePermissionMixin.hasAnyRole(this.user, roles);
51
+ }
52
+ hasAllRoles(roles) {
53
+ return RolePermission_1.RolePermissionMixin.hasAllRoles(this.user, roles);
54
+ }
55
+ hasPermission(permission) {
56
+ return RolePermission_1.RolePermissionMixin.hasPermission(this.user, permission);
57
+ }
58
+ hasAnyPermission(permissions) {
59
+ return RolePermission_1.RolePermissionMixin.hasAnyPermission(this.user, permissions);
60
+ }
61
+ hasAllPermissions(permissions) {
62
+ return RolePermission_1.RolePermissionMixin.hasAllPermissions(this.user, permissions);
63
+ }
64
+ // ── Internals ───────────────────────────────────────────────────
65
+ getUser() {
66
+ return this.user;
67
+ }
68
+ /**
69
+ * Clear the authorization cache (e.g. after role change mid-request).
70
+ */
71
+ flushCache() {
72
+ this.cache.clear();
73
+ }
74
+ buildCacheKey(ability, args) {
75
+ // Build a simple cache key from ability + resource IDs
76
+ const argIds = args.map(a => {
77
+ if (a && typeof a === 'object' && a.id !== undefined)
78
+ return `${a.constructor?.name || 'obj'}:${a.id}`;
79
+ if (a && typeof a === 'object' && a.constructor)
80
+ return a.constructor.name;
81
+ return String(a);
82
+ });
83
+ return `${ability}:${argIds.join(',')}`;
84
+ }
85
+ }
86
+ exports.AuthorizationContext = AuthorizationContext;
87
+ //# sourceMappingURL=AuthorizationContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationContext.js","sourceRoot":"","sources":["../../src/AuthorizationContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { AuthorizationContext } from './AuthorizationContext';
2
+ import { AuthResponse } from './AuthResponse';
3
+ export declare class AuthorizationManager {
4
+ private user;
5
+ private context;
6
+ constructor(user: any);
7
+ /**
8
+ * Create a request-scoped authorization context and bind it to the request.
9
+ */
10
+ static createContext(request: any): AuthorizationContext;
11
+ can(ability: string, ...args: any[]): Promise<boolean>;
12
+ cannot(ability: string, ...args: any[]): Promise<boolean>;
13
+ authorize(ability: string, ...args: any[]): Promise<void>;
14
+ inspect(ability: string, ...args: any[]): Promise<AuthResponse>;
15
+ any(abilities: string[], ...args: any[]): Promise<boolean>;
16
+ every(abilities: string[], ...args: any[]): Promise<boolean>;
17
+ none(abilities: string[], ...args: any[]): Promise<boolean>;
18
+ hasRole(role: string | string[]): boolean;
19
+ hasAnyRole(roles: string[]): boolean;
20
+ hasAllRoles(roles: string[]): boolean;
21
+ hasPermission(permission: string): boolean;
22
+ hasAnyPermission(permissions: string[]): boolean;
23
+ hasAllPermissions(permissions: string[]): boolean;
24
+ }
25
+ //# sourceMappingURL=AuthorizationManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationManager.d.ts","sourceRoot":"","sources":["../../src/AuthorizationManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,IAAI,EAAE,GAAG;IAKrB;;OAEG;WACW,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,oBAAoB;IAWlD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAI/D,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1D,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO;IAIzC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;IAIpC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;IAIrC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI1C,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO;IAIhD,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO;CAG3D"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthorizationManager = void 0;
4
+ const AuthorizationContext_1 = require("./AuthorizationContext");
5
+ class AuthorizationManager {
6
+ constructor(user) {
7
+ this.user = user;
8
+ this.context = new AuthorizationContext_1.AuthorizationContext(user);
9
+ }
10
+ /**
11
+ * Create a request-scoped authorization context and bind it to the request.
12
+ */
13
+ static createContext(request) {
14
+ const user = request.user || (request.auth ? null : null);
15
+ const context = new AuthorizationContext_1.AuthorizationContext(user);
16
+ request.can = context.can.bind(context);
17
+ request.cannot = context.cannot.bind(context);
18
+ request.authorize = context.authorize.bind(context);
19
+ return context;
20
+ }
21
+ // ── Delegated checks ────────────────────────────────────────────
22
+ async can(ability, ...args) {
23
+ return await this.context.can(ability, ...args);
24
+ }
25
+ async cannot(ability, ...args) {
26
+ return await this.context.cannot(ability, ...args);
27
+ }
28
+ async authorize(ability, ...args) {
29
+ return await this.context.authorize(ability, ...args);
30
+ }
31
+ async inspect(ability, ...args) {
32
+ return await this.context.inspect(ability, ...args);
33
+ }
34
+ async any(abilities, ...args) {
35
+ return await this.context.any(abilities, ...args);
36
+ }
37
+ async every(abilities, ...args) {
38
+ return await this.context.every(abilities, ...args);
39
+ }
40
+ async none(abilities, ...args) {
41
+ return await this.context.none(abilities, ...args);
42
+ }
43
+ // ── Role & Permission ───────────────────────────────────────────
44
+ hasRole(role) {
45
+ return this.context.hasRole(role);
46
+ }
47
+ hasAnyRole(roles) {
48
+ return this.context.hasAnyRole(roles);
49
+ }
50
+ hasAllRoles(roles) {
51
+ return this.context.hasAllRoles(roles);
52
+ }
53
+ hasPermission(permission) {
54
+ return this.context.hasPermission(permission);
55
+ }
56
+ hasAnyPermission(permissions) {
57
+ return this.context.hasAnyPermission(permissions);
58
+ }
59
+ hasAllPermissions(permissions) {
60
+ return this.context.hasAllPermissions(permissions);
61
+ }
62
+ }
63
+ exports.AuthorizationManager = AuthorizationManager;
64
+ //# sourceMappingURL=AuthorizationManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationManager.js","sourceRoot":"","sources":["../../src/AuthorizationManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface Policy {
2
+ [method: string]: ((user: any, ...args: any[]) => boolean | Promise<boolean>) | any;
3
+ }
4
+ //# sourceMappingURL=Policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Policy.d.ts","sourceRoot":"","sources":["../../../src/Contracts/Policy.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACnB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;CACvF"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Policy.js","sourceRoot":"","sources":["../../../src/Contracts/Policy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare class AuthorizationException extends Error {
2
+ statusCode: number;
3
+ code: string | null;
4
+ constructor(message?: string, code?: string | null);
5
+ }
6
+ //# sourceMappingURL=AuthorizationException.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationException.d.ts","sourceRoot":"","sources":["../../../src/Exceptions/AuthorizationException.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAuB,SAAQ,KAAK;IACtC,UAAU,EAAE,MAAM,CAAO;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEf,OAAO,GAAE,MAAuC,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW;CAK3F"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthorizationException = void 0;
4
+ class AuthorizationException extends Error {
5
+ constructor(message = 'This action is unauthorized.', code = null) {
6
+ super(message);
7
+ this.statusCode = 403;
8
+ this.name = 'AuthorizationException';
9
+ this.code = code;
10
+ }
11
+ }
12
+ exports.AuthorizationException = AuthorizationException;
13
+ //# sourceMappingURL=AuthorizationException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthorizationException.js","sourceRoot":"","sources":["../../../src/Exceptions/AuthorizationException.ts"],"names":[],"mappings":";;;AAAA,MAAa,sBAAuB,SAAQ,KAAK;IAI7C,YAAY,UAAkB,8BAA8B,EAAE,OAAsB,IAAI;QACpF,KAAK,CAAC,OAAO,CAAC,CAAC;QAJZ,eAAU,GAAW,GAAG,CAAC;QAK5B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;CACJ;AATD,wDASC"}
@@ -0,0 +1,76 @@
1
+ import { AuthResponse } from './AuthResponse';
2
+ type GateCallback = (user: any, ...args: any[]) => boolean | AuthResponse | Promise<boolean | AuthResponse>;
3
+ type BeforeCallback = (user: any, ability: string, ...args: any[]) => boolean | null | undefined | Promise<boolean | null | undefined>;
4
+ type AfterCallback = (user: any, ability: string, result: boolean, ...args: any[]) => void | Promise<void>;
5
+ export declare class Gate {
6
+ private static abilities;
7
+ private static policyResolver;
8
+ private static beforeCallbacks;
9
+ private static afterCallbacks;
10
+ private static currentUser;
11
+ /**
12
+ * Define a new ability.
13
+ */
14
+ static define(ability: string, callback: GateCallback): void;
15
+ /**
16
+ * Register a policy for a model.
17
+ */
18
+ static policy(model: any, policy: any): void;
19
+ /**
20
+ * Register a callback to run before all gate checks.
21
+ * Return `true` to allow immediately (super admin bypass).
22
+ * Return `false` to deny immediately.
23
+ * Return `null`/`undefined` to continue to the actual gate check.
24
+ */
25
+ static before(callback: BeforeCallback): void;
26
+ /**
27
+ * Register a callback to run after all gate checks.
28
+ * Useful for logging, auditing decisions, etc.
29
+ */
30
+ static after(callback: AfterCallback): void;
31
+ /**
32
+ * Set the current user for authorization checks.
33
+ */
34
+ static forUser(user: any): typeof Gate;
35
+ /**
36
+ * Determine if the user is authorized for an ability.
37
+ * Returns the AuthResponse for rich deny messages.
38
+ */
39
+ static inspect(ability: string, ...args: any[]): Promise<AuthResponse>;
40
+ /**
41
+ * Determine if the user is authorized to perform an ability.
42
+ */
43
+ static allows(ability: string, ...args: any[]): Promise<boolean>;
44
+ /**
45
+ * Determine if the user is NOT authorized.
46
+ */
47
+ static denies(ability: string, ...args: any[]): Promise<boolean>;
48
+ /**
49
+ * Authorize or throw exception with optional custom message.
50
+ */
51
+ static authorize(ability: string, ...args: any[]): Promise<void>;
52
+ /**
53
+ * Check authorization (alias for allows).
54
+ */
55
+ static check(ability: string, ...args: any[]): Promise<boolean>;
56
+ /**
57
+ * Check if the user can perform ANY of the given abilities.
58
+ */
59
+ static any(abilities: string[], ...args: any[]): Promise<boolean>;
60
+ /**
61
+ * Check if the user can perform ALL of the given abilities.
62
+ */
63
+ static every(abilities: string[], ...args: any[]): Promise<boolean>;
64
+ /**
65
+ * Check if the user can perform NONE of the given abilities.
66
+ */
67
+ static none(abilities: string[], ...args: any[]): Promise<boolean>;
68
+ private static normalizeResult;
69
+ private static runAfterCallbacks;
70
+ /**
71
+ * Reset all gates, policies, and hooks (useful for testing).
72
+ */
73
+ static reset(): void;
74
+ }
75
+ export {};
76
+ //# sourceMappingURL=Gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gate.d.ts","sourceRoot":"","sources":["../../src/Gate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;AAC5G,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AACvI,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3G,qBAAa,IAAI;IACb,OAAO,CAAC,MAAM,CAAC,SAAS,CAAwC;IAChE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAwC;IACrE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAuB;IACpD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAa;IAIvC;;OAEG;WACW,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAInE;;OAEG;WACW,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI;IAMnD;;;;;OAKG;WACW,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIpD;;;OAGG;WACW,KAAK,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAMlD;;OAEG;WACW,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,IAAI;IAO7C;;;OAGG;WACiB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDnF;;OAEG;WACiB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7E;;OAEG;WACiB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7E;;OAEG;WACiB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7E;;OAEG;WACiB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5E;;OAEG;WACiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9E;;OAEG;WACiB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAShF;;OAEG;WACiB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/E,OAAO,CAAC,MAAM,CAAC,eAAe;mBAOT,iBAAiB;IAMtC;;OAEG;WACW,KAAK,IAAI,IAAI;CAO9B"}