@medusajs/rbac 2.12.5-preview-20260108144952

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 (54) hide show
  1. package/dist/index.d.ts +63 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +8 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/migrations/Migration20251219163509.d.ts +5 -0
  6. package/dist/migrations/Migration20251219163509.d.ts.map +1 -0
  7. package/dist/migrations/Migration20251219163509.js +36 -0
  8. package/dist/migrations/Migration20251219163509.js.map +1 -0
  9. package/dist/models/index.d.ts +5 -0
  10. package/dist/models/index.d.ts.map +1 -0
  11. package/dist/models/index.js +15 -0
  12. package/dist/models/index.js.map +1 -0
  13. package/dist/models/rbac-policy.d.ts +11 -0
  14. package/dist/models/rbac-policy.d.ts.map +1 -0
  15. package/dist/models/rbac-policy.js +30 -0
  16. package/dist/models/rbac-policy.js.map +1 -0
  17. package/dist/models/rbac-role-inheritance.d.ts +58 -0
  18. package/dist/models/rbac-role-inheritance.d.ts.map +1 -0
  19. package/dist/models/rbac-role-inheritance.js +33 -0
  20. package/dist/models/rbac-role-inheritance.js.map +1 -0
  21. package/dist/models/rbac-role-parent.d.ts +48 -0
  22. package/dist/models/rbac-role-parent.d.ts.map +1 -0
  23. package/dist/models/rbac-role-parent.js +31 -0
  24. package/dist/models/rbac-role-parent.js.map +1 -0
  25. package/dist/models/rbac-role-policy.d.ts +28 -0
  26. package/dist/models/rbac-role-policy.d.ts.map +1 -0
  27. package/dist/models/rbac-role-policy.js +32 -0
  28. package/dist/models/rbac-role-policy.js.map +1 -0
  29. package/dist/models/rbac-role.d.ts +28 -0
  30. package/dist/models/rbac-role.d.ts.map +1 -0
  31. package/dist/models/rbac-role.js +30 -0
  32. package/dist/models/rbac-role.js.map +1 -0
  33. package/dist/repositories/index.d.ts +2 -0
  34. package/dist/repositories/index.d.ts.map +1 -0
  35. package/dist/repositories/index.js +18 -0
  36. package/dist/repositories/index.js.map +1 -0
  37. package/dist/repositories/rbac.d.ts +9 -0
  38. package/dist/repositories/rbac.d.ts.map +1 -0
  39. package/dist/repositories/rbac.js +101 -0
  40. package/dist/repositories/rbac.js.map +1 -0
  41. package/dist/services/index.d.ts +2 -0
  42. package/dist/services/index.d.ts.map +1 -0
  43. package/dist/services/index.js +9 -0
  44. package/dist/services/index.js.map +1 -0
  45. package/dist/services/rbac-module-service.d.ts +131 -0
  46. package/dist/services/rbac-module-service.d.ts.map +1 -0
  47. package/dist/services/rbac-module-service.js +207 -0
  48. package/dist/services/rbac-module-service.js.map +1 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -0
  50. package/dist/types/index.d.ts +2 -0
  51. package/dist/types/index.d.ts.map +1 -0
  52. package/dist/types/index.js +3 -0
  53. package/dist/types/index.js.map +1 -0
  54. package/package.json +45 -0
@@ -0,0 +1,9 @@
1
+ import { Context } from "@medusajs/framework/types";
2
+ import { MikroOrmBase } from "@medusajs/framework/utils";
3
+ export declare class RbacRepository extends MikroOrmBase {
4
+ constructor();
5
+ listPoliciesForRole(roleId: string, sharedContext?: Context): Promise<any[]>;
6
+ listPoliciesForRoles(roleIds: string[], sharedContext?: Context): Promise<Map<string, any[]>>;
7
+ checkForCycle(roleId: string, parentId: string, sharedContext?: Context): Promise<boolean>;
8
+ }
9
+ //# sourceMappingURL=rbac.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../../src/repositories/rbac.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,qBAAa,cAAe,SAAQ,YAAY;;IAOxC,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,OAAY,GAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;IAQX,oBAAoB,CACxB,OAAO,EAAE,MAAM,EAAE,EACjB,aAAa,GAAE,OAAY,GAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAiExB,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,OAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;CA+BpB"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RbacRepository = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ class RbacRepository extends utils_1.MikroOrmBase {
6
+ constructor() {
7
+ // @ts-ignore
8
+ // eslint-disable-next-line prefer-rest-params
9
+ super(...arguments);
10
+ }
11
+ async listPoliciesForRole(roleId, sharedContext = {}) {
12
+ const policiesByRole = await this.listPoliciesForRoles([roleId], sharedContext);
13
+ return policiesByRole.get(roleId) || [];
14
+ }
15
+ async listPoliciesForRoles(roleIds, sharedContext = {}) {
16
+ const manager = this.getActiveManager(sharedContext);
17
+ const knex = manager.getKnex();
18
+ if (!roleIds?.length) {
19
+ return new Map();
20
+ }
21
+ const placeholders = roleIds.map(() => "?").join(",");
22
+ const query = `
23
+ WITH RECURSIVE role_hierarchy AS (
24
+ SELECT id, name, id as original_role_id, ARRAY[id] as path
25
+ FROM rbac_role
26
+ WHERE id IN (${placeholders}) AND deleted_at IS NULL
27
+
28
+ UNION ALL
29
+
30
+ SELECT r.id, r.name, rh.original_role_id, rh.path || r.id
31
+ FROM rbac_role r
32
+ INNER JOIN rbac_role_parent ri ON ri.parent_id = r.id
33
+ INNER JOIN role_hierarchy rh ON rh.id = ri.role_id
34
+ WHERE r.deleted_at IS NULL
35
+ AND ri.deleted_at IS NULL
36
+ AND NOT (r.id = ANY(rh.path))
37
+ )
38
+ SELECT DISTINCT
39
+ rh.original_role_id,
40
+ p.id,
41
+ p.key,
42
+ p.resource,
43
+ p.operation,
44
+ p.name,
45
+ p.description,
46
+ p.metadata,
47
+ p.created_at,
48
+ p.updated_at,
49
+ CASE WHEN rp.role_id = rh.original_role_id THEN NULL ELSE rp.role_id END as inherited_from_role_id
50
+ FROM rbac_policy p
51
+ INNER JOIN rbac_role_policy rp ON rp.policy_id = p.id
52
+ INNER JOIN role_hierarchy rh ON rh.id = rp.role_id
53
+ WHERE p.deleted_at IS NULL AND rp.deleted_at IS NULL
54
+ ORDER BY rh.original_role_id, p.resource, p.operation, p.key
55
+ `;
56
+ const result = await knex.raw(query, roleIds);
57
+ const rows = result.rows || [];
58
+ // Group policies by role_id
59
+ const policiesByRole = new Map();
60
+ for (const row of rows) {
61
+ const roleId = row.original_role_id;
62
+ delete row.original_role_id;
63
+ if (!policiesByRole.has(roleId)) {
64
+ policiesByRole.set(roleId, []);
65
+ }
66
+ policiesByRole.get(roleId).push(row);
67
+ }
68
+ return policiesByRole;
69
+ }
70
+ async checkForCycle(roleId, parentId, sharedContext = {}) {
71
+ const manager = this.getActiveManager(sharedContext);
72
+ const knex = manager.getKnex();
73
+ // Check if adding this parent would create a circular dependency
74
+ // A cycle exists if role_id is already an ancestor of parent_id
75
+ // (i.e., if we traverse up from parent_id, we reach role_id)
76
+ const query = `
77
+ WITH RECURSIVE role_hierarchy AS (
78
+ SELECT id, ARRAY[id] as path
79
+ FROM rbac_role
80
+ WHERE id = ? AND deleted_at IS NULL
81
+
82
+ UNION ALL
83
+
84
+ SELECT r.id, rh.path || r.id
85
+ FROM role_hierarchy rh
86
+ INNER JOIN rbac_role_parent ri ON ri.role_id = rh.id
87
+ INNER JOIN rbac_role r ON r.id = ri.parent_id
88
+ WHERE r.deleted_at IS NULL
89
+ AND ri.deleted_at IS NULL
90
+ AND NOT (r.id = ANY(rh.path))
91
+ )
92
+ SELECT EXISTS(
93
+ SELECT 1 FROM role_hierarchy WHERE id = ?
94
+ ) as has_cycle
95
+ `;
96
+ const result = await knex.raw(query, [parentId, roleId]);
97
+ return result.rows[0]?.has_cycle || false;
98
+ }
99
+ }
100
+ exports.RbacRepository = RbacRepository;
101
+ //# sourceMappingURL=rbac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac.js","sourceRoot":"","sources":["../../src/repositories/rbac.ts"],"names":[],"mappings":";;;AAEA,qDAAwD;AAExD,MAAa,cAAe,SAAQ,oBAAY;IAC9C;QACE,aAAa;QACb,8CAA8C;QAC9C,KAAK,CAAC,GAAG,SAAS,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,MAAc,EACd,gBAAyB,EAAE;QAE3B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,oBAAoB,CACpD,CAAC,MAAM,CAAC,EACR,aAAa,CACd,CAAA;QACD,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,OAAiB,EACjB,gBAAyB,EAAE;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAmB,aAAa,CAAC,CAAA;QACtE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAE9B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YACrB,OAAO,IAAI,GAAG,EAAE,CAAA;QAClB,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAErD,MAAM,KAAK,GAAG;;;;uBAIK,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6B9B,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;QAE9B,4BAA4B;QAC5B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAA;QAE/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAA;YACnC,OAAO,GAAG,CAAC,gBAAgB,CAAA;YAE3B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YAChC,CAAC;YAED,cAAc,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAAc,EACd,QAAgB,EAChB,gBAAyB,EAAE;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAmB,aAAa,CAAC,CAAA;QACtE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAE9B,iEAAiE;QACjE,gEAAgE;QAChE,6DAA6D;QAC7D,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;KAmBb,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QACxD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,KAAK,CAAA;IAC3C,CAAC;CACF;AAzHD,wCAyHC"}
@@ -0,0 +1,2 @@
1
+ export { default as RbacModuleService } from "./rbac-module-service";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RbacModuleService = void 0;
7
+ var rbac_module_service_1 = require("./rbac-module-service");
8
+ Object.defineProperty(exports, "RbacModuleService", { enumerable: true, get: function () { return __importDefault(rbac_module_service_1).default; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;AAAA,6DAAoE;AAA3D,yIAAA,OAAO,OAAqB"}
@@ -0,0 +1,131 @@
1
+ import { Context, FilterableRbacRoleProps, FindConfig, RbacRoleDTO } from "@medusajs/framework/types";
2
+ import { CreateRbacRoleParentDTO, IRbacModuleService, RbacRoleParentDTO, UpdateRbacRoleParentDTO } from "@medusajs/types";
3
+ import { RbacRepository } from "../repositories";
4
+ type InjectedDependencies = {
5
+ rbacRepository: RbacRepository;
6
+ };
7
+ declare const RbacModuleService_base: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
8
+ readonly RbacRole: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
9
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
10
+ name: import("@medusajs/framework/utils").TextProperty;
11
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
12
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
13
+ policies: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
14
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
15
+ role: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role">, undefined>;
16
+ policy: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
17
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
18
+ key: import("@medusajs/framework/utils").TextProperty;
19
+ resource: import("@medusajs/framework/utils").TextProperty;
20
+ operation: import("@medusajs/framework/utils").TextProperty;
21
+ name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
22
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
23
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
24
+ }>, "rbac_policy">, undefined>;
25
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
26
+ }>, "rbac_role_policy">>;
27
+ parents: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
28
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
29
+ role: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role">, undefined>;
30
+ parent: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role">, undefined>;
31
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
32
+ }>, "rbac_role_parent">>;
33
+ }>, "rbac_role">;
34
+ readonly RbacPolicy: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
35
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
36
+ key: import("@medusajs/framework/utils").TextProperty;
37
+ resource: import("@medusajs/framework/utils").TextProperty;
38
+ operation: import("@medusajs/framework/utils").TextProperty;
39
+ name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
40
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
41
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
42
+ }>, "rbac_policy">;
43
+ readonly RbacRoleParent: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
44
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
45
+ role: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
46
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
47
+ name: import("@medusajs/framework/utils").TextProperty;
48
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
49
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
50
+ policies: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
51
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
52
+ role: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role">, undefined>;
53
+ policy: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
54
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
55
+ key: import("@medusajs/framework/utils").TextProperty;
56
+ resource: import("@medusajs/framework/utils").TextProperty;
57
+ operation: import("@medusajs/framework/utils").TextProperty;
58
+ name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
59
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
60
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
61
+ }>, "rbac_policy">, undefined>;
62
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
63
+ }>, "rbac_role_policy">>;
64
+ parents: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role_parent">>;
65
+ }>, "rbac_role">, undefined>;
66
+ parent: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
67
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
68
+ name: import("@medusajs/framework/utils").TextProperty;
69
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
70
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
71
+ policies: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
72
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
73
+ role: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role">, undefined>;
74
+ policy: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
75
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
76
+ key: import("@medusajs/framework/utils").TextProperty;
77
+ resource: import("@medusajs/framework/utils").TextProperty;
78
+ operation: import("@medusajs/framework/utils").TextProperty;
79
+ name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
80
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
81
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
82
+ }>, "rbac_policy">, undefined>;
83
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
84
+ }>, "rbac_role_policy">>;
85
+ parents: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role_parent">>;
86
+ }>, "rbac_role">, undefined>;
87
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
88
+ }>, "rbac_role_parent">;
89
+ readonly RbacRolePolicy: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
90
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
91
+ role: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
92
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
93
+ name: import("@medusajs/framework/utils").TextProperty;
94
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
95
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
96
+ policies: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role_policy">>;
97
+ parents: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
98
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
99
+ role: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role">, undefined>;
100
+ parent: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "rbac_role">, undefined>;
101
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
102
+ }>, "rbac_role_parent">>;
103
+ }>, "rbac_role">, undefined>;
104
+ policy: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
105
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
106
+ key: import("@medusajs/framework/utils").TextProperty;
107
+ resource: import("@medusajs/framework/utils").TextProperty;
108
+ operation: import("@medusajs/framework/utils").TextProperty;
109
+ name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
110
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
111
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
112
+ }>, "rbac_policy">, undefined>;
113
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
114
+ }>, "rbac_role_policy">;
115
+ }>>;
116
+ export default class RbacModuleService extends RbacModuleService_base implements IRbacModuleService {
117
+ protected readonly rbacRepository_: RbacRepository;
118
+ constructor({ rbacRepository }: InjectedDependencies);
119
+ __hooks: {
120
+ onApplicationStart: () => Promise<void>;
121
+ };
122
+ onApplicationStart(): Promise<void>;
123
+ private syncRegisteredPolicies;
124
+ listPoliciesForRole(roleId: string, sharedContext?: Context): Promise<any[]>;
125
+ listRbacRoles(filters?: FilterableRbacRoleProps, config?: FindConfig<RbacRoleDTO>, sharedContext?: Context): Promise<RbacRoleDTO[]>;
126
+ listAndCountRbacRoles(filters?: FilterableRbacRoleProps, config?: FindConfig<RbacRoleDTO>, sharedContext?: Context): Promise<[RbacRoleDTO[], number]>;
127
+ createRbacRoleParents(data: CreateRbacRoleParentDTO[], sharedContext?: Context): Promise<RbacRoleParentDTO[]>;
128
+ updateRbacRoleParents(data: UpdateRbacRoleParentDTO[], sharedContext?: Context): Promise<RbacRoleParentDTO[]>;
129
+ }
130
+ export {};
131
+ //# sourceMappingURL=rbac-module-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac-module-service.d.ts","sourceRoot":"","sources":["../../src/services/rbac-module-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,uBAAuB,EACvB,UAAU,EACV,WAAW,EACZ,MAAM,2BAA2B,CAAA;AAQlC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,KAAK,oBAAoB,GAAG;IAC1B,cAAc,EAAE,cAAc,CAAA;CAC/B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,MAAM,CAAC,OAAO,OAAO,iBACnB,SAAQ,sBAMR,YAAW,kBAAkB;IAE7B,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,cAAc,CAAA;gBAEtC,EAAE,cAAc,EAAE,EAAE,oBAAoB;IAMpD,OAAO;;MAIN;IAEK,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;YAK3B,sBAAsB;IA6E9B,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACG,aAAa,GAAE,OAAY,GAC3C,OAAO,CAAC,GAAG,EAAE,CAAC;IAMX,aAAa,CACjB,OAAO,GAAE,uBAA4B,EACrC,MAAM,GAAE,UAAU,CAAC,WAAW,CAAM,EACnB,aAAa,GAAE,OAAY,GAC3C,OAAO,CAAC,WAAW,EAAE,CAAC;IA4BnB,qBAAqB,CACzB,OAAO,GAAE,uBAA4B,EACrC,MAAM,GAAE,UAAU,CAAC,WAAW,CAAM,EACnB,aAAa,GAAE,OAAY,GAC3C,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IA4B7B,qBAAqB,CACzB,IAAI,EAAE,uBAAuB,EAAE,EACd,aAAa,GAAE,OAAY,GAC3C,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA4BzB,qBAAqB,CACzB,IAAI,EAAE,uBAAuB,EAAE,EACd,aAAa,GAAE,OAAY,GAC3C,OAAO,CAAC,iBAAiB,EAAE,CAAC;CA2BhC"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const utils_1 = require("@medusajs/framework/utils");
16
+ const _models_1 = require("../models");
17
+ class RbacModuleService extends (0, utils_1.MedusaService)({
18
+ RbacRole: _models_1.RbacRole,
19
+ RbacPolicy: _models_1.RbacPolicy,
20
+ RbacRoleParent: _models_1.RbacRoleParent,
21
+ RbacRolePolicy: _models_1.RbacRolePolicy,
22
+ }) {
23
+ constructor({ rbacRepository }) {
24
+ // @ts-ignore
25
+ super(...arguments);
26
+ this.__hooks = {
27
+ onApplicationStart: async () => {
28
+ this.onApplicationStart();
29
+ },
30
+ };
31
+ this.rbacRepository_ = rbacRepository;
32
+ }
33
+ async onApplicationStart() {
34
+ await this.syncRegisteredPolicies();
35
+ }
36
+ async syncRegisteredPolicies(sharedContext = {}) {
37
+ const registeredPolicies = Object.entries(utils_1.Policy).map(([name, { resource, operation, description }]) => ({
38
+ key: `${resource}:${operation}`,
39
+ name,
40
+ resource,
41
+ operation,
42
+ description,
43
+ }));
44
+ const registeredKeys = registeredPolicies.map((p) => p.key);
45
+ // Fetch all existing policies (including soft-deleted ones)
46
+ const existingPolicies = await this.listRbacPolicies({}, { withDeleted: true }, sharedContext);
47
+ const existingPoliciesMap = new Map(existingPolicies.map((p) => [p.key, p]));
48
+ const policiesToCreate = [];
49
+ const policiesToUpdate = [];
50
+ const policiesToRestore = [];
51
+ // Process registered policies
52
+ for (const registeredPolicy of registeredPolicies) {
53
+ const existing = existingPoliciesMap.get(registeredPolicy.key);
54
+ const hasChanges = existing &&
55
+ (existing.name !== registeredPolicy.name ||
56
+ existing.description !== registeredPolicy.description);
57
+ if (!existing) {
58
+ policiesToCreate.push(registeredPolicy);
59
+ }
60
+ else if (existing.deleted_at) {
61
+ policiesToRestore.push(existing.id);
62
+ if (hasChanges) {
63
+ policiesToUpdate.push({
64
+ id: existing.id,
65
+ name: registeredPolicy.name,
66
+ description: registeredPolicy.description,
67
+ });
68
+ }
69
+ }
70
+ else if (hasChanges) {
71
+ policiesToUpdate.push({
72
+ id: existing.id,
73
+ name: registeredPolicy.name,
74
+ description: registeredPolicy.description,
75
+ });
76
+ }
77
+ }
78
+ const policiesToSoftDelete = existingPolicies
79
+ .filter((p) => !p.deleted_at && !registeredKeys.includes(p.key))
80
+ .map((p) => p.id);
81
+ // First restore any soft-deleted policies
82
+ if (policiesToRestore.length > 0) {
83
+ await this.restoreRbacPolicies(policiesToRestore, {}, sharedContext);
84
+ }
85
+ await (0, utils_1.promiseAll)([
86
+ policiesToCreate.length > 0 &&
87
+ this.createRbacPolicies(policiesToCreate, sharedContext),
88
+ policiesToUpdate.length > 0 &&
89
+ this.updateRbacPolicies(policiesToUpdate, sharedContext),
90
+ policiesToSoftDelete.length > 0 &&
91
+ this.softDeleteRbacPolicies(policiesToSoftDelete, {}, sharedContext),
92
+ ]);
93
+ }
94
+ async listPoliciesForRole(roleId, sharedContext = {}) {
95
+ return await this.rbacRepository_.listPoliciesForRole(roleId, sharedContext);
96
+ }
97
+ // @ts-expect-error
98
+ async listRbacRoles(filters = {}, config = {}, sharedContext = {}) {
99
+ const roles = await super.listRbacRoles(filters, config, sharedContext);
100
+ const shouldIncludePolicies = config.relations?.includes("policies") ||
101
+ config.select?.includes("policies");
102
+ if (shouldIncludePolicies && roles.length > 0) {
103
+ const roleIds = roles.map((role) => role.id);
104
+ const policiesByRole = await this.rbacRepository_.listPoliciesForRoles(roleIds, sharedContext);
105
+ for (const role of roles) {
106
+ role.policies = policiesByRole.get(role.id) || [];
107
+ }
108
+ }
109
+ return roles;
110
+ }
111
+ // @ts-expect-error
112
+ async listAndCountRbacRoles(filters = {}, config = {}, sharedContext = {}) {
113
+ const [roles, count] = await super.listAndCountRbacRoles(filters, config, sharedContext);
114
+ const shouldIncludePolicies = config.relations?.includes("policies") ||
115
+ config.select?.includes("policies");
116
+ if (shouldIncludePolicies && roles.length > 0) {
117
+ const roleIds = roles.map((role) => role.id);
118
+ const policiesByRole = await this.rbacRepository_.listPoliciesForRoles(roleIds, sharedContext);
119
+ for (const role of roles) {
120
+ role.policies = policiesByRole.get(role.id) || [];
121
+ }
122
+ }
123
+ return [roles, count];
124
+ }
125
+ // @ts-expect-error
126
+ async createRbacRoleParents(data, sharedContext = {}) {
127
+ for (const parent of data) {
128
+ const { role_id, parent_id } = parent;
129
+ if (role_id === parent_id) {
130
+ throw new Error(`Cannot create role parent relationship: a role cannot be its own parent (role_id: ${role_id})`);
131
+ }
132
+ const wouldCreateCycle = await this.rbacRepository_.checkForCycle(role_id, parent_id, sharedContext);
133
+ if (wouldCreateCycle) {
134
+ throw new Error(`Cannot create role parent relationship: this would create a circular dependency (role_id: ${role_id}, parent_id: ${parent_id})`);
135
+ }
136
+ }
137
+ return await super.createRbacRoleParents(data, sharedContext);
138
+ }
139
+ // @ts-expect-error
140
+ async updateRbacRoleParents(data, sharedContext = {}) {
141
+ for (const parent of data) {
142
+ const { role_id, parent_id } = parent;
143
+ if (parent_id) {
144
+ if (role_id === parent_id) {
145
+ throw new Error(`Cannot update role parent relationship: a role cannot be its own parent (role_id: ${role_id})`);
146
+ }
147
+ const wouldCreateCycle = await this.rbacRepository_.checkForCycle(role_id, parent_id, sharedContext);
148
+ if (wouldCreateCycle) {
149
+ throw new Error(`Cannot update role parent relationship: this would create a circular dependency (role_id: ${role_id}, parent_id: ${parent_id})`);
150
+ }
151
+ }
152
+ }
153
+ return await super.updateRbacRoleParents(data, sharedContext);
154
+ }
155
+ }
156
+ exports.default = RbacModuleService;
157
+ __decorate([
158
+ (0, utils_1.InjectManager)(),
159
+ __param(0, (0, utils_1.MedusaContext)()),
160
+ __metadata("design:type", Function),
161
+ __metadata("design:paramtypes", [Object]),
162
+ __metadata("design:returntype", Promise)
163
+ ], RbacModuleService.prototype, "syncRegisteredPolicies", null);
164
+ __decorate([
165
+ (0, utils_1.InjectManager)(),
166
+ __param(1, (0, utils_1.MedusaContext)()),
167
+ __metadata("design:type", Function),
168
+ __metadata("design:paramtypes", [String, Object]),
169
+ __metadata("design:returntype", Promise)
170
+ ], RbacModuleService.prototype, "listPoliciesForRole", null);
171
+ __decorate([
172
+ (0, utils_1.InjectManager)()
173
+ // @ts-expect-error
174
+ ,
175
+ __param(2, (0, utils_1.MedusaContext)()),
176
+ __metadata("design:type", Function),
177
+ __metadata("design:paramtypes", [Object, Object, Object]),
178
+ __metadata("design:returntype", Promise)
179
+ ], RbacModuleService.prototype, "listRbacRoles", null);
180
+ __decorate([
181
+ (0, utils_1.InjectManager)()
182
+ // @ts-expect-error
183
+ ,
184
+ __param(2, (0, utils_1.MedusaContext)()),
185
+ __metadata("design:type", Function),
186
+ __metadata("design:paramtypes", [Object, Object, Object]),
187
+ __metadata("design:returntype", Promise)
188
+ ], RbacModuleService.prototype, "listAndCountRbacRoles", null);
189
+ __decorate([
190
+ (0, utils_1.InjectManager)()
191
+ // @ts-expect-error
192
+ ,
193
+ __param(1, (0, utils_1.MedusaContext)()),
194
+ __metadata("design:type", Function),
195
+ __metadata("design:paramtypes", [Array, Object]),
196
+ __metadata("design:returntype", Promise)
197
+ ], RbacModuleService.prototype, "createRbacRoleParents", null);
198
+ __decorate([
199
+ (0, utils_1.InjectManager)()
200
+ // @ts-expect-error
201
+ ,
202
+ __param(1, (0, utils_1.MedusaContext)()),
203
+ __metadata("design:type", Function),
204
+ __metadata("design:paramtypes", [Array, Object]),
205
+ __metadata("design:returntype", Promise)
206
+ ], RbacModuleService.prototype, "updateRbacRoleParents", null);
207
+ //# sourceMappingURL=rbac-module-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac-module-service.js","sourceRoot":"","sources":["../../src/services/rbac-module-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"root":["../src/index.ts","../src/migrations/Migration20251219163509.ts","../src/models/index.ts","../src/models/rbac-policy.ts","../src/models/rbac-role-inheritance.ts","../src/models/rbac-role-parent.ts","../src/models/rbac-role-policy.ts","../src/models/rbac-role.ts","../src/repositories/index.ts","../src/repositories/rbac.ts","../src/services/index.ts","../src/services/rbac-module-service.ts","../src/types/index.ts"],"version":"5.9.3"}
@@ -0,0 +1,2 @@
1
+ export type RbacModuleOptions = Record<string, unknown>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@medusajs/rbac",
3
+ "version": "2.12.5-preview-20260108144952",
4
+ "description": "Medusa RBAC module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "!dist/**/__tests__",
10
+ "!dist/**/__mocks__",
11
+ "!dist/**/__fixtures__"
12
+ ],
13
+ "engines": {
14
+ "node": ">=20"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/medusajs/medusa",
19
+ "directory": "packages/modules/rbac"
20
+ },
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "author": "Medusa",
25
+ "license": "MIT",
26
+ "scripts": {
27
+ "watch": "yarn run -T tsc --build --watch",
28
+ "watch:test": "yarn run -T tsc --build tsconfig.spec.json --watch",
29
+ "resolve:aliases": "yarn run -T tsc --showConfig -p tsconfig.json > tsconfig.resolved.json && yarn run -T tsc-alias -p tsconfig.resolved.json && yarn run -T rimraf tsconfig.resolved.json",
30
+ "build": "yarn run -T rimraf dist && yarn run -T tsc --build && npm run resolve:aliases",
31
+ "test": "../../../node_modules/.bin/jest --passWithNoTests --bail --forceExit --testPathPattern=src",
32
+ "test:integration": "../../../node_modules/.bin/jest --passWithNoTests --forceExit --testPathPattern=\"integration-tests/__tests__/.*\\.ts\"",
33
+ "migration:initial": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts MIKRO_ORM_ALLOW_GLOBAL_CLI=true medusa-mikro-orm migration:create --initial",
34
+ "migration:create": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts MIKRO_ORM_ALLOW_GLOBAL_CLI=true medusa-mikro-orm migration:create",
35
+ "migration:up": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts MIKRO_ORM_ALLOW_GLOBAL_CLI=true medusa-mikro-orm migration:up",
36
+ "orm:cache:clear": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts MIKRO_ORM_ALLOW_GLOBAL_CLI=true medusa-mikro-orm cache:clear"
37
+ },
38
+ "devDependencies": {
39
+ "@medusajs/framework": "2.12.5-preview-20260108144952",
40
+ "@medusajs/test-utils": "2.12.5-preview-20260108144952"
41
+ },
42
+ "peerDependencies": {
43
+ "@medusajs/framework": "2.12.5-preview-20260108144952"
44
+ }
45
+ }