@spinajs/rbac 2.0.521 → 2.0.523

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 (105) hide show
  1. package/lib/cjs/actions.d.ts +269 -93
  2. package/lib/cjs/actions.d.ts.map +1 -1
  3. package/lib/cjs/actions.js +695 -354
  4. package/lib/cjs/actions.js.map +1 -1
  5. package/lib/cjs/auth.d.ts.map +1 -1
  6. package/lib/cjs/auth.js +6 -6
  7. package/lib/cjs/auth.js.map +1 -1
  8. package/lib/cjs/cli/ChangeUserPassword.d.ts.map +1 -1
  9. package/lib/cjs/cli/ChangeUserPassword.js +2 -2
  10. package/lib/cjs/cli/ChangeUserPassword.js.map +1 -1
  11. package/lib/cjs/cli/CreateUser.d.ts.map +1 -1
  12. package/lib/cjs/cli/CreateUser.js +8 -1
  13. package/lib/cjs/cli/CreateUser.js.map +1 -1
  14. package/lib/cjs/config/rbac.d.ts +40 -0
  15. package/lib/cjs/config/rbac.d.ts.map +1 -1
  16. package/lib/cjs/config/rbac.js +40 -0
  17. package/lib/cjs/config/rbac.js.map +1 -1
  18. package/lib/cjs/events/UserCreated.d.ts +2 -1
  19. package/lib/cjs/events/UserCreated.d.ts.map +1 -1
  20. package/lib/cjs/events/UserCreated.js +13 -3
  21. package/lib/cjs/events/UserCreated.js.map +1 -1
  22. package/lib/cjs/exceptions.d.ts +69 -0
  23. package/lib/cjs/exceptions.d.ts.map +1 -0
  24. package/lib/cjs/exceptions.js +86 -0
  25. package/lib/cjs/exceptions.js.map +1 -0
  26. package/lib/cjs/index.d.ts +3 -0
  27. package/lib/cjs/index.d.ts.map +1 -1
  28. package/lib/cjs/index.js +3 -0
  29. package/lib/cjs/index.js.map +1 -1
  30. package/lib/cjs/interfaces.d.ts +2 -31
  31. package/lib/cjs/interfaces.d.ts.map +1 -1
  32. package/lib/cjs/interfaces.js +1 -12
  33. package/lib/cjs/interfaces.js.map +1 -1
  34. package/lib/cjs/middleware.d.ts +16 -6
  35. package/lib/cjs/middleware.d.ts.map +1 -1
  36. package/lib/cjs/middleware.js +151 -90
  37. package/lib/cjs/middleware.js.map +1 -1
  38. package/lib/cjs/orm-permission.d.ts +77 -0
  39. package/lib/cjs/orm-permission.d.ts.map +1 -0
  40. package/lib/cjs/orm-permission.js +128 -0
  41. package/lib/cjs/orm-permission.js.map +1 -0
  42. package/lib/cjs/password.d.ts +18 -1
  43. package/lib/cjs/password.d.ts.map +1 -1
  44. package/lib/cjs/password.js +61 -5
  45. package/lib/cjs/password.js.map +1 -1
  46. package/lib/cjs/permission-service.d.ts +80 -0
  47. package/lib/cjs/permission-service.d.ts.map +1 -0
  48. package/lib/cjs/permission-service.js +144 -0
  49. package/lib/cjs/permission-service.js.map +1 -0
  50. package/lib/cjs/profile.js +1 -1
  51. package/lib/cjs/profile.js.map +1 -1
  52. package/lib/mjs/actions.d.ts +269 -93
  53. package/lib/mjs/actions.d.ts.map +1 -1
  54. package/lib/mjs/actions.js +682 -358
  55. package/lib/mjs/actions.js.map +1 -1
  56. package/lib/mjs/auth.d.ts.map +1 -1
  57. package/lib/mjs/auth.js +7 -7
  58. package/lib/mjs/auth.js.map +1 -1
  59. package/lib/mjs/cli/ChangeUserPassword.d.ts.map +1 -1
  60. package/lib/mjs/cli/ChangeUserPassword.js +3 -3
  61. package/lib/mjs/cli/ChangeUserPassword.js.map +1 -1
  62. package/lib/mjs/cli/CreateUser.d.ts.map +1 -1
  63. package/lib/mjs/cli/CreateUser.js +8 -1
  64. package/lib/mjs/cli/CreateUser.js.map +1 -1
  65. package/lib/mjs/config/rbac.d.ts +40 -0
  66. package/lib/mjs/config/rbac.d.ts.map +1 -1
  67. package/lib/mjs/config/rbac.js +40 -0
  68. package/lib/mjs/config/rbac.js.map +1 -1
  69. package/lib/mjs/events/UserCreated.d.ts +2 -1
  70. package/lib/mjs/events/UserCreated.d.ts.map +1 -1
  71. package/lib/mjs/events/UserCreated.js +13 -3
  72. package/lib/mjs/events/UserCreated.js.map +1 -1
  73. package/lib/mjs/exceptions.d.ts +69 -0
  74. package/lib/mjs/exceptions.d.ts.map +1 -0
  75. package/lib/mjs/exceptions.js +71 -0
  76. package/lib/mjs/exceptions.js.map +1 -0
  77. package/lib/mjs/index.d.ts +3 -0
  78. package/lib/mjs/index.d.ts.map +1 -1
  79. package/lib/mjs/index.js +3 -0
  80. package/lib/mjs/index.js.map +1 -1
  81. package/lib/mjs/interfaces.d.ts +2 -31
  82. package/lib/mjs/interfaces.d.ts.map +1 -1
  83. package/lib/mjs/interfaces.js +0 -11
  84. package/lib/mjs/interfaces.js.map +1 -1
  85. package/lib/mjs/middleware.d.ts +16 -6
  86. package/lib/mjs/middleware.d.ts.map +1 -1
  87. package/lib/mjs/middleware.js +152 -91
  88. package/lib/mjs/middleware.js.map +1 -1
  89. package/lib/mjs/orm-permission.d.ts +77 -0
  90. package/lib/mjs/orm-permission.d.ts.map +1 -0
  91. package/lib/mjs/orm-permission.js +119 -0
  92. package/lib/mjs/orm-permission.js.map +1 -0
  93. package/lib/mjs/password.d.ts +18 -1
  94. package/lib/mjs/password.d.ts.map +1 -1
  95. package/lib/mjs/password.js +62 -6
  96. package/lib/mjs/password.js.map +1 -1
  97. package/lib/mjs/permission-service.d.ts +80 -0
  98. package/lib/mjs/permission-service.d.ts.map +1 -0
  99. package/lib/mjs/permission-service.js +137 -0
  100. package/lib/mjs/permission-service.js.map +1 -0
  101. package/lib/mjs/profile.js +2 -2
  102. package/lib/mjs/profile.js.map +1 -1
  103. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  104. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  105. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,EAAc,YAAY,EAAkB,MAAM,aAAa,CAAC;AAMvE,OAAO,WAAW,CAAC;AACnB,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,yBAAyB,CAAC;AACjC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AAKxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iDAAiD,CAAC;AAChE,cAAc,sDAAsD,CAAC;AACrE,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAGjC,QAAA,MAAQ,UAAU,sBAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AAErC,qBACa,gBAAiB,SAAQ,YAAY;IACzC,SAAS,IAAI,IAAI,CAyFvB;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,EAAc,YAAY,EAAkB,MAAM,aAAa,CAAC;AAMvE,OAAO,WAAW,CAAC;AACnB,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,yBAAyB,CAAC;AACjC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AAKxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iDAAiD,CAAC;AAChE,cAAc,sDAAsD,CAAC;AACrE,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAGjC,QAAA,MAAQ,UAAU,sBAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AAErC,qBACa,gBAAiB,SAAQ,YAAY;IACzC,SAAS,IAAI,IAAI,CAyFvB;CACF"}
package/lib/cjs/index.js CHANGED
@@ -41,6 +41,7 @@ const User_js_1 = require("./models/User.js");
41
41
  const UserMetadata_js_1 = require("./models/UserMetadata.js");
42
42
  const model_token_js_1 = require("./model-token.js");
43
43
  __exportStar(require("./interfaces.js"), exports);
44
+ __exportStar(require("./exceptions.js"), exports);
44
45
  __exportStar(require("./auth.js"), exports);
45
46
  __exportStar(require("./password.js"), exports);
46
47
  __exportStar(require("./session.js"), exports);
@@ -54,6 +55,8 @@ __exportStar(require("./events/index.js"), exports);
54
55
  __exportStar(require("./actions.js"), exports);
55
56
  __exportStar(require("./middleware.js"), exports);
56
57
  __exportStar(require("./decorators.js"), exports);
58
+ __exportStar(require("./orm-permission.js"), exports);
59
+ __exportStar(require("./permission-service.js"), exports);
57
60
  __exportStar(require("./util.js"), exports);
58
61
  __exportStar(require("./profile.js"), exports);
59
62
  __exportStar(require("./impersonation.js"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -93,7 +93,8 @@ export declare abstract class PasswordProvider {
93
93
  */
94
94
  abstract hash(input: string): Promise<string>;
95
95
  /**
96
- * Generates random user password
96
+ * Generates a random password drawn from `rbac.password.generator` and
97
+ * satisfying `rbac.password.validation.rule`.
97
98
  */
98
99
  abstract generate(): string;
99
100
  }
@@ -257,37 +258,7 @@ export declare abstract class SessionProvider<T extends ISession = ISession> ext
257
258
  */
258
259
  protected isExpired(s: ISession): boolean;
259
260
  }
260
- export declare enum AthenticationErrorCodes {
261
- E_USER_BANNED = 1,
262
- E_USER_NOT_ACTIVE = 2,
263
- E_INVALID_CREDENTIALS = 3,
264
- E_LOGIN_ATTEMPTS_EXCEEDED = 4
265
- }
266
261
  export type PermissionType = 'readAny' | 'readOwn' | 'updateAny' | 'updateOwn' | 'deleteAny' | 'deleteOwn' | 'createAny' | 'createOwn';
267
- /**
268
- * Static a model may declare to constrain ONE operation, checked by
269
- * `RbacModelPermissionMiddleware` before the generic `rbac` fallback.
270
- *
271
- * The hook receives the query builder as `this` and the acting user as its only argument,
272
- * and is called only on the `:own` path — an `:any` grant short-circuits before it.
273
- *
274
- * ```ts
275
- * class Entry extends ModelBase<Entry> {
276
- * // fallback for whichever of read / update / delete has no specific hook
277
- * static rbac(this: IWhereBuilder<Entry>, user: User) { ... }
278
- * static rbacDelete(this: DeleteQueryBuilder<Entry>, user: User) { ... }
279
- * }
280
- * ```
281
- *
282
- * `rbacCreate` is deliberately excluded from the `rbac` fallback: `rbac` has only ever run
283
- * on builders with a WHERE clause, so every existing implementation is where-shaped and
284
- * `InsertQueryBuilder` has no `where`. See {@link RBAC_HOOK_FALLBACK}.
285
- */
286
- export type RbacHookName = 'rbacRead' | 'rbacUpdate' | 'rbacDelete' | 'rbacCreate';
287
- /**
288
- * Name of the generic hook every operation except create falls back to.
289
- */
290
- export declare const RBAC_HOOK_FALLBACK = "rbac";
291
262
  export interface IRbacModelDescriptor extends IModelDescriptor {
292
263
  RbacResource: string;
293
264
  OwnerField: string;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.UserProfileProvider = exports.UserProfile = exports.PasswordValidationProvider = exports.RBAC_HOOK_FALLBACK = exports.AthenticationErrorCodes = exports.SessionProvider = exports.FederatedAuthProvider = exports.AuthProvider = exports.PasswordProvider = exports.SessionExpirationProvider = void 0;
12
+ exports.UserProfileProvider = exports.UserProfile = exports.PasswordValidationProvider = exports.SessionProvider = exports.FederatedAuthProvider = exports.AuthProvider = exports.PasswordProvider = exports.SessionExpirationProvider = void 0;
13
13
  const di_1 = require("@spinajs/di");
14
14
  const configuration_1 = require("@spinajs/configuration");
15
15
  const luxon_1 = require("luxon");
@@ -72,17 +72,6 @@ __decorate([
72
72
  (0, configuration_1.AutoinjectService)('rbac.session.expiration'),
73
73
  __metadata("design:type", SessionExpirationProvider)
74
74
  ], SessionProvider.prototype, "Expiration", void 0);
75
- var AthenticationErrorCodes;
76
- (function (AthenticationErrorCodes) {
77
- AthenticationErrorCodes[AthenticationErrorCodes["E_USER_BANNED"] = 1] = "E_USER_BANNED";
78
- AthenticationErrorCodes[AthenticationErrorCodes["E_USER_NOT_ACTIVE"] = 2] = "E_USER_NOT_ACTIVE";
79
- AthenticationErrorCodes[AthenticationErrorCodes["E_INVALID_CREDENTIALS"] = 3] = "E_INVALID_CREDENTIALS";
80
- AthenticationErrorCodes[AthenticationErrorCodes["E_LOGIN_ATTEMPTS_EXCEEDED"] = 4] = "E_LOGIN_ATTEMPTS_EXCEEDED";
81
- })(AthenticationErrorCodes || (exports.AthenticationErrorCodes = AthenticationErrorCodes = {}));
82
- /**
83
- * Name of the generic hook every operation except create falls back to.
84
- */
85
- exports.RBAC_HOOK_FALLBACK = 'rbac';
86
75
  /**
87
76
  * Interface to provide implementation of password rule validation
88
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oCAA2C;AAC3C,0DAA2D;AAE3D,iCAAiC;AAkEjC;;;;;GAKG;AACH;CAUC;;AAED;;GAEG;AACH;CAsBC;;AAED;;;;;GAKG;AACH;CAgEC;;AAED;;;;;;GAMG;AACH;CAwBC;;AAED,qBAAqE,SAAQ,iBAAY;IA8DvF;;OAEG;IACO,sBAAsB,CAAC,CAAW;QAC1C,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACO,sBAAsB,CAAC,CAAW;QAC1C,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACO,SAAS,CAAC,CAAW;QAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,gBAAQ,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;CACF;;AA3EW;IADT,IAAA,iCAAiB,EAAC,yBAAyB,CAAC;8BACtB,yBAAyB;mDAAC;AA6EnD,IAAY,uBAKX;AALD,WAAY,uBAAuB;IACjC,uFAAiB,CAAA;IACjB,+FAAqB,CAAA;IACrB,uGAAyB,CAAA;IACzB,+GAA6B,CAAA;AAC/B,CAAC,EALW,uBAAuB,aAAvB,uBAAuB,GAAvB,uBAAuB,QAKlC;AAyBD;;GAEG;AACU,QAAA,kBAAkB,GAAG,MAAM,CAAC;AAezC;;GAEG;AACH;CAEC;;AAGD;IAIE,YAAmB,IAAW,EAAE,IAAU;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF;;AAED;;;;;GAKG;AACH;CAEC"}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oCAA2C;AAC3C,0DAA2D;AAE3D,iCAAiC;AAkEjC;;;;;GAKG;AACH;CAUC;;AAED;;GAEG;AACH;CAuBC;;AAED;;;;;GAKG;AACH;CAgEC;;AAED;;;;;;GAMG;AACH;CAwBC;;AAED,qBAAqE,SAAQ,iBAAY;IA8DvF;;OAEG;IACO,sBAAsB,CAAC,CAAW;QAC1C,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACO,sBAAsB,CAAC,CAAW;QAC1C,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACO,SAAS,CAAC,CAAW;QAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,gBAAQ,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;CACF;;AA3EW;IADT,IAAA,iCAAiB,EAAC,yBAAyB,CAAC;8BACtB,yBAAyB;mDAAC;AA4FnD;;GAEG;AACH;CAEC;;AAGD;IAIE,YAAmB,IAAW,EAAE,IAAU;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF;;AAED;;;;;GAKG;AACH;CAEC"}
@@ -1,10 +1,11 @@
1
- import { QueryBuilder, QueryMiddleware } from '@spinajs/orm';
2
- import { IRbacModelDescriptor, RbacHookName } from './interfaces.js';
3
- import { AccessControl } from 'accesscontrol';
1
+ import { Class } from '@spinajs/di';
2
+ import { ModelBase, QueryBuilder, QueryMiddleware } from '@spinajs/orm';
3
+ import { IRbacModelDescriptor, PermissionType } from './interfaces.js';
4
4
  import { Log } from '@spinajs/log-common';
5
+ import type { User } from './models/User.js';
6
+ import { OrmPermissionPolicy } from './orm-permission.js';
5
7
  export declare class RbacModelPermissionMiddleware extends QueryMiddleware {
6
8
  protected Log: Log;
7
- protected Ac: AccessControl;
8
9
  /**
9
10
  * INSERT is enforced here rather than in `afterQueryCreation` because the row payload does
10
11
  * not exist at construction time — `values()` is called afterwards and would overwrite an
@@ -13,6 +14,14 @@ export declare class RbacModelPermissionMiddleware extends QueryMiddleware {
13
14
  */
14
15
  beforeQueryExecution(builder: QueryBuilder<any>): Promise<void>;
15
16
  afterQueryCreation(builder: QueryBuilder): void;
17
+ /**
18
+ * Policies to apply for this query: one per distinct scope name across the caller's
19
+ * granted roles. A role without the grant must not contribute a policy — that would
20
+ * WIDEN the OR-composition in `afterQueryCreation`. Multiple distinct scopes OR-compose
21
+ * downstream: permissions are additive, a row is reachable if any granted role's policy
22
+ * admits it.
23
+ */
24
+ protected policiesFor(roles: string[], resource: string, ownScope: PermissionType, descriptor: IRbacModelDescriptor, model: Class<ModelBase<unknown>> | undefined): OrmPermissionPolicy[];
16
25
  /**
17
26
  * Everything both hooks need, or `undefined` when this query is not subject to a check.
18
27
  *
@@ -26,8 +35,9 @@ export declare class RbacModelPermissionMiddleware extends QueryMiddleware {
26
35
  canOwn: boolean;
27
36
  canAny: boolean;
28
37
  action: string;
29
- hook: RbacHookName;
30
- user: import("./index.js").User;
38
+ user: User;
39
+ roles: string[];
40
+ ownScope: PermissionType;
31
41
  } | undefined;
32
42
  }
33
43
  //# sourceMappingURL=middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAgF,YAAY,EAAE,eAAe,EAA0C,MAAM,cAAc,CAAC;AAEnL,OAAO,EAAqB,oBAAoB,EAAsC,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,GAAG,EAAU,MAAM,qBAAqB,CAAC;AAuFlD,qBACa,6BAA8B,SAAQ,eAAe;IAGhE,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;IAGpB,SAAS,CAAC,EAAE,EAAG,aAAa,CAAC;IAE7B;;;;;OAKG;IACG,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CpE;IAED,kBAAkB,CAAC,OAAO,EAAE,YAAY,QAmEvC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY;;;;;;;;kBAmEtC;CACF"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,aAAa,CAAC;AACpD,OAAO,EAAiF,SAAS,EAAgB,YAAY,EAAE,eAAe,EAA0C,MAAM,cAAc,CAAC;AAE7M,OAAO,EAAqB,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,GAAG,EAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAsE,mBAAmB,EAAwE,MAAM,qBAAqB,CAAC;AAkHpM,qBACa,6BAA8B,SAAQ,eAAe;IAEhE,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;IAEpB;;;;;OAKG;IACG,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDpE;IAED,kBAAkB,CAAC,OAAO,EAAE,YAAY,QAgEvC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,mBAAmB,EAAE,CAgDxL;IAED;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY;;;;;;;;;kBA0DtC;CACF"}
@@ -13,13 +13,12 @@ exports.RbacModelPermissionMiddleware = void 0;
13
13
  const di_1 = require("@spinajs/di");
14
14
  const orm_1 = require("@spinajs/orm");
15
15
  const async_hooks_1 = require("async_hooks");
16
- const interfaces_js_1 = require("./interfaces.js");
17
- const accesscontrol_1 = require("accesscontrol");
18
16
  const exceptions_1 = require("@spinajs/exceptions");
19
17
  const log_common_1 = require("@spinajs/log-common");
18
+ const orm_permission_js_1 = require("./orm-permission.js");
19
+ const permission_service_js_1 = require("./permission-service.js");
20
20
  /**
21
- * Which permission scopes a builder type is checked against, and which per-operation
22
- * model hook it looks for.
21
+ * Which permission scopes a builder type is checked against.
23
22
  *
24
23
  * Keyed on the CONSTRUCTOR, not on `constructor.name`. A name-keyed lookup breaks under
25
24
  * minification and silently yields "no mapping" — for a security check that means an
@@ -28,14 +27,13 @@ const log_common_1 = require("@spinajs/log-common");
28
27
  * `InsertQueryBuilder` was missing here while `PERMISSION_SCOPE_TO_QUERY` claimed to
29
28
  * support `createOwn`/`createAny`, so the insert branch of the middleware could only ever
30
29
  * have thrown a TypeError. The inverse map below is now DERIVED from this one, so the two
31
- * cannot drift apart again — and the hook name lives here for the same reason, so a hook
32
- * can never be paired with the wrong builder type.
30
+ * cannot drift apart again.
33
31
  */
34
32
  const QUERY_TO_PERMISSION = new Map([
35
- [orm_1.DeleteQueryBuilder, { own: 'deleteOwn', all: 'deleteAny', hook: 'rbacDelete' }],
36
- [orm_1.UpdateQueryBuilder, { own: 'updateOwn', all: 'updateAny', hook: 'rbacUpdate' }],
37
- [orm_1.SelectQueryBuilder, { own: 'readOwn', all: 'readAny', hook: 'rbacRead' }],
38
- [orm_1.InsertQueryBuilder, { own: 'createOwn', all: 'createAny', hook: 'rbacCreate' }],
33
+ [orm_1.DeleteQueryBuilder, { own: 'deleteOwn', all: 'deleteAny' }],
34
+ [orm_1.UpdateQueryBuilder, { own: 'updateOwn', all: 'updateAny' }],
35
+ [orm_1.SelectQueryBuilder, { own: 'readOwn', all: 'readAny' }],
36
+ [orm_1.InsertQueryBuilder, { own: 'createOwn', all: 'createAny' }],
39
37
  ]);
40
38
  /** Derived inverse of {@link QUERY_TO_PERMISSION}. Never hand-maintained. */
41
39
  const PERMISSION_SCOPE_TO_QUERY = new Map();
@@ -56,32 +54,60 @@ function permissionsFor(builder) {
56
54
  return undefined;
57
55
  }
58
56
  /**
59
- * The custom rbac constraint `model` declares for this operation, or `undefined` when it
60
- * declares none and the caller should fall through to `OwnerField`.
61
- *
62
- * Resolution is specific-then-generic: `rbacDelete` beats `rbac` on a delete, and a model
63
- * declaring only `rbac` keeps its pre-split behaviour on every operation. Statics resolve
64
- * through the prototype chain, so a subclass inherits whichever hooks it does not override.
65
- *
66
- * `allowFallback` is false for INSERT only. `rbac` has always been called on builders that
67
- * have a WHERE clause, so every implementation in the wild is where-shaped —
68
- * `ContentEntries.rbac` and `EntriesGroup.rbac` both call `whereExist`, which
69
- * `InsertQueryBuilder` does not define. Falling back there would turn a silent gap into a
70
- * crash on every insert for every model already using the feature. Insert-time control is
71
- * opt-in via an explicit `rbacCreate`.
57
+ * Steps from `model` up its prototype (class inheritance) chain to `boundModel`, or
58
+ * `undefined` if `boundModel` is not `model` itself or an ancestor. ES class inheritance
59
+ * puts the parent constructor at `Object.getPrototypeOf(Child)`, so walking constructors —
60
+ * not instances is the correct way to test "is a subclass of".
61
+ */
62
+ function distanceTo(model, boundModel) {
63
+ let current = model;
64
+ for (let distance = 0; current; distance++) {
65
+ if (current === boundModel) {
66
+ return distance;
67
+ }
68
+ current = Object.getPrototypeOf(current);
69
+ }
70
+ return undefined;
71
+ }
72
+ /**
73
+ * Picks the policy bound to `model` itself or the closest bound ancestor. Two unrelated
74
+ * models can share one resource+scope key on purpose (CampaignFileAttachment /
75
+ * ArrowV1CampaignView) — the resource string alone cannot disambiguate them, so every
76
+ * candidate is checked against `model`'s actual prototype chain. When both an ancestor-bound
77
+ * and an exact-bound policy are registered, the most-derived (smallest distance) one wins.
72
78
  */
73
- function rbacHook(model, hook, allowFallback) {
74
- const statics = model;
75
- if (!statics) {
79
+ function selectPolicyClass(candidates, model) {
80
+ if (!candidates) {
76
81
  return undefined;
77
82
  }
78
- if (typeof statics[hook] === 'function') {
79
- return statics[hook];
83
+ let best;
84
+ let bestDistance = Infinity;
85
+ for (const candidate of candidates) {
86
+ const boundModel = (0, orm_permission_js_1.ormPermissionModel)(candidate);
87
+ if (!boundModel) {
88
+ continue;
89
+ }
90
+ const distance = distanceTo(model, boundModel);
91
+ if (distance !== undefined && distance < bestDistance) {
92
+ best = candidate;
93
+ bestDistance = distance;
94
+ }
80
95
  }
81
- if (allowFallback && typeof statics[interfaces_js_1.RBAC_HOOK_FALLBACK] === 'function') {
82
- return statics[interfaces_js_1.RBAC_HOOK_FALLBACK];
96
+ return best;
97
+ }
98
+ /** Fallback for models with `@ResourceOwner()` and no registered policy class. */
99
+ class OwnerFieldPolicy extends orm_permission_js_1.OrmPermissionPolicy {
100
+ constructor(ownerField) {
101
+ super();
102
+ this.ownerField = ownerField;
103
+ }
104
+ scope(query, user) {
105
+ query.andWhere(this.ownerField, user.PrimaryKeyValue);
106
+ }
107
+ async authorizeCreate(query, user) {
108
+ // Overwrite, never merge: a caller-supplied owner id is exactly the IDOR this closes.
109
+ query.forceColumn(this.ownerField, user.PrimaryKeyValue);
83
110
  }
84
- return undefined;
85
111
  }
86
112
  let RbacModelPermissionMiddleware = class RbacModelPermissionMiddleware extends orm_1.QueryMiddleware {
87
113
  /**
@@ -106,26 +132,31 @@ let RbacModelPermissionMiddleware = class RbacModelPermissionMiddleware extends
106
132
  if (!canOwn) {
107
133
  throw new exceptions_1.Forbidden(`User does not have permission to access ${resource}:${context.action} permission`);
108
134
  }
109
- /**
110
- * Model can take over insert-time ownership itself. No fallback to the generic `rbac`
111
- * here see {@link rbacHook}.
112
- *
113
- * Awaited: unlike the where-clause hooks, an insert rule usually cannot be decided from
114
- * the payload alone — "is this the caller's group?" is a lookup. Dropping the returned
115
- * promise would let the row land before the answer came back.
116
- */
117
- const rbacFunc = rbacHook(builder.Model, context.hook, false);
118
- if (rbacFunc) {
119
- this.Log.trace(`Applying custom ${context.hook} func for ${resource}`);
120
- await rbacFunc.call(builder, context.user);
121
- return;
122
- }
123
- if (!descriptor.OwnerField) {
124
- this.Log.error(`Model ${descriptor.Name} does not have OwnerField set, cannot apply :own permission`);
125
- throw new orm_1.OrmException(`Model ${descriptor.Name} does not have OwnerField set, cannot apply :own permission`);
135
+ const policies = this.policiesFor(context.roles, resource, context.ownScope, descriptor, builder.Model);
136
+ // A candidate that does not opt into insert control denies by default (see
137
+ // OrmPermissionPolicy.authorizeCreate). Pre-refactor, a model with no rbacCreate static
138
+ // but an OwnerField had its owner column stamped and the insert allowed — an unrelated
139
+ // policy registered only for scope() must not shadow that. Deny-by-default is kept when
140
+ // there is no OwnerField to fall back to.
141
+ const createPolicies = policies.map((policy) => {
142
+ const opensOwnCreate = policy.authorizeCreate !== orm_permission_js_1.OrmPermissionPolicy.prototype.authorizeCreate;
143
+ return !opensOwnCreate && descriptor.OwnerField ? new OwnerFieldPolicy(descriptor.OwnerField) : policy;
144
+ });
145
+ // Multiple distinct scopes OR-compose on inserts too: the insert is allowed if ANY
146
+ // granted role's policy authorizes it. Policies are tried in registration-set order;
147
+ // when every one denies, the last error propagates.
148
+ let lastError;
149
+ for (const policy of createPolicies) {
150
+ try {
151
+ this.Log.trace(`Applying authorizeCreate of ${policy.constructor.name} for ${resource}`);
152
+ await policy.authorizeCreate(builder, context.user);
153
+ return;
154
+ }
155
+ catch (err) {
156
+ lastError = err;
157
+ }
126
158
  }
127
- // Overwrite, never merge: a caller-supplied owner id is exactly the IDOR this closes.
128
- builder.forceColumn(descriptor.OwnerField, context.user.PrimaryKeyValue);
159
+ throw lastError;
129
160
  }
130
161
  afterQueryCreation(builder) {
131
162
  // Insert is handled at execution time; anything else without a WHERE clause to constrain
@@ -146,11 +177,6 @@ let RbacModelPermissionMiddleware = class RbacModelPermissionMiddleware extends
146
177
  throw new exceptions_1.Forbidden(`User does not have permission to access ${resource}:${context.action} permission`);
147
178
  }
148
179
  this.Log.trace(`Resource ${resource}:own permission granted`);
149
- /**
150
- * Model can have a custom rbac permission check, either for this operation
151
- * specifically (`rbacRead` / `rbacUpdate` / `rbacDelete`) or generically (`rbac`).
152
- */
153
- const rbacFunc = rbacHook(builder.Model, context.hook, true);
154
180
  /**
155
181
  * `relationScope: 'join'` ( @OrmResource options ): when this model is populated as a
156
182
  * BelongsTo relation, its :own constraint folded into the parent WHERE would silently
@@ -161,31 +187,79 @@ let RbacModelPermissionMiddleware = class RbacModelPermissionMiddleware extends
161
187
  */
162
188
  const joinScoped = descriptor.RbacRelationScope === 'join' && builder instanceof orm_1.SelectQueryBuilder;
163
189
  const user = context.user;
164
- if (rbacFunc) {
165
- this.Log.trace(`Applying custom ${context.hook} func for ${resource}`);
166
- if (joinScoped) {
167
- builder.whereOnJoin(function () {
168
- rbacFunc.call(builder, user);
169
- });
170
- }
171
- else {
172
- rbacFunc.call(builder, user);
190
+ const policies = this.policiesFor(context.roles, resource, context.ownScope, descriptor, builder.Model);
191
+ const method = builder instanceof orm_1.UpdateQueryBuilder ? 'scopeUpdate' : builder instanceof orm_1.DeleteQueryBuilder ? 'scopeDelete' : 'scopeRead';
192
+ const apply = (target) => {
193
+ if (policies.length === 1) {
194
+ policies[0][method](target, user);
195
+ return;
173
196
  }
174
- return;
175
- }
176
- if (!descriptor.OwnerField) {
177
- this.Log.error(`Model ${descriptor.Name} does not have OwnerField set or static rbac function, cannot apply :own permission`);
178
- throw new orm_1.OrmException(`Model ${descriptor.Name} does not have OwnerField set, cannot apply :own permission`);
179
- }
180
- this.Log.trace(`Applying owner field restriction for ${resource}`);
197
+ // Distinct scopes across the caller's roles OR-compose: reachable if ANY admits.
198
+ target.andWhere(function () {
199
+ for (const policy of policies) {
200
+ this.orWhere(function () {
201
+ policy[method](this, user);
202
+ });
203
+ }
204
+ });
205
+ };
206
+ this.Log.trace(`Applying ${policies.length} permission ${policies.length === 1 ? 'policy' : 'policies'} (${method}) for ${resource}`);
181
207
  if (joinScoped) {
182
208
  builder.whereOnJoin(function () {
183
- builder.andWhere(descriptor.OwnerField, user.PrimaryKeyValue);
209
+ apply(builder);
184
210
  });
185
211
  }
186
212
  else {
187
- builder.andWhere(descriptor.OwnerField, user.PrimaryKeyValue);
213
+ apply(builder);
214
+ }
215
+ }
216
+ /**
217
+ * Policies to apply for this query: one per distinct scope name across the caller's
218
+ * granted roles. A role without the grant must not contribute a policy — that would
219
+ * WIDEN the OR-composition in `afterQueryCreation`. Multiple distinct scopes OR-compose
220
+ * downstream: permissions are additive, a row is reachable if any granted role's policy
221
+ * admits it.
222
+ */
223
+ policiesFor(roles, resource, ownScope, descriptor, model) {
224
+ const scopeNames = new Set();
225
+ for (const role of roles) {
226
+ // role unknown to accesscontrol answers null — contributes no grant, no scope
227
+ const permission = (0, permission_service_js_1.probeGrant)([role], ownScope, resource);
228
+ if (!permission?.granted) {
229
+ continue;
230
+ }
231
+ const attrs = permission.attributes ?? [];
232
+ const tokens = attrs.filter((a) => typeof a === 'string' && a.startsWith(orm_permission_js_1.PERMISSION_SCOPE_ATTR_PREFIX)).map((a) => a.slice(orm_permission_js_1.PERMISSION_SCOPE_ATTR_PREFIX.length));
233
+ if (tokens.length === 0) {
234
+ scopeNames.add(orm_permission_js_1.DEFAULT_PERMISSION_SCOPE);
235
+ }
236
+ else {
237
+ tokens.forEach((t) => scopeNames.add(t));
238
+ }
239
+ }
240
+ // canOwn was computed over the role union; per-role queries can still all miss when
241
+ // grants come from odd extension shapes. Degrade to the default scope — resolution
242
+ // below still fails loud if nothing is registered.
243
+ if (scopeNames.size === 0) {
244
+ scopeNames.add(orm_permission_js_1.DEFAULT_PERMISSION_SCOPE);
188
245
  }
246
+ const registered = (0, orm_permission_js_1.getOrCreatePolicyMap)();
247
+ const policies = [];
248
+ for (const name of scopeNames) {
249
+ const candidates = registered.get((0, orm_permission_js_1.policyMapKey)(resource, name));
250
+ const policyClass = selectPolicyClass(candidates, model);
251
+ if (policyClass) {
252
+ policies.push(di_1.DI.resolve(policyClass));
253
+ continue;
254
+ }
255
+ if (name === orm_permission_js_1.DEFAULT_PERMISSION_SCOPE && descriptor.OwnerField) {
256
+ policies.push(new OwnerFieldPolicy(descriptor.OwnerField));
257
+ continue;
258
+ }
259
+ this.Log.error(`No OrmPermissionPolicy registered for ${descriptor.Name}/${name} and no OwnerField fallback`);
260
+ throw new orm_1.OrmException(`no OrmPermissionPolicy registered for model ${descriptor.Name} scope '${name}' and no OwnerField fallback — refusing to run an unscoped :own query`);
261
+ }
262
+ return policies;
189
263
  }
190
264
  /**
191
265
  * Everything both hooks need, or `undefined` when this query is not subject to a check.
@@ -233,22 +307,13 @@ let RbacModelPermissionMiddleware = class RbacModelPermissionMiddleware extends
233
307
  }
234
308
  const ownScope = storage.PermissionScope ?? scopes.own;
235
309
  const anyScope = storage.PermissionScope ?? scopes.all;
236
- const roles = storage.ActiveRole ? [storage.ActiveRole] : storage.User.Role;
237
- let canAny = false;
238
- let canOwn = false;
239
- try {
240
- canAny = this.Ac.can(roles)[anyScope](resource).granted;
241
- canOwn = this.Ac.can(roles)[ownScope](resource).granted;
242
- }
243
- catch (err) {
244
- // accesscontrol throws eg. "Role not found" when role has no grants registered
245
- // treat as no permission so caller gets Forbidden instead of library error
246
- this.Log.trace(`Permission check for roles ${roles} on resource ${resource} failed: ${err.message}, treating as no permission`);
247
- }
310
+ const roles = (0, permission_service_js_1.effectiveRoles)(storage.User, storage);
311
+ const canAny = (0, permission_service_js_1.probeGrant)(roles, anyScope, resource)?.granted ?? false;
312
+ const canOwn = (0, permission_service_js_1.probeGrant)(roles, ownScope, resource)?.granted ?? false;
248
313
  // 'readOwn' -> 'read'. Keeps the Forbidden message accurate per builder type instead of
249
314
  // the old hard-coded ':read', which was wrong for updates and deletes.
250
315
  const action = anyScope.replace(/(Any|Own)$/, '');
251
- return { descriptor, resource, canOwn, canAny, action, hook: scopes.hook, user: storage.User };
316
+ return { descriptor, resource, canOwn, canAny, action, user: storage.User, roles, ownScope };
252
317
  }
253
318
  };
254
319
  exports.RbacModelPermissionMiddleware = RbacModelPermissionMiddleware;
@@ -256,10 +321,6 @@ __decorate([
256
321
  (0, log_common_1.Logger)('RBAC'),
257
322
  __metadata("design:type", log_common_1.Log)
258
323
  ], RbacModelPermissionMiddleware.prototype, "Log", void 0);
259
- __decorate([
260
- (0, di_1.Autoinject)(),
261
- __metadata("design:type", accesscontrol_1.AccessControl)
262
- ], RbacModelPermissionMiddleware.prototype, "Ac", void 0);
263
324
  exports.RbacModelPermissionMiddleware = RbacModelPermissionMiddleware = __decorate([
264
325
  (0, di_1.Injectable)(orm_1.QueryMiddleware)
265
326
  ], RbacModelPermissionMiddleware);
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"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"}