@lightdash/common 0.1936.2 → 0.1937.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/cjs/authorization/index.d.ts +8 -4
  2. package/dist/cjs/authorization/index.d.ts.map +1 -1
  3. package/dist/cjs/authorization/index.js +26 -3
  4. package/dist/cjs/authorization/index.js.map +1 -1
  5. package/dist/cjs/authorization/index.mock.d.ts +2 -0
  6. package/dist/cjs/authorization/index.mock.d.ts.map +1 -1
  7. package/dist/cjs/authorization/index.mock.js +2 -0
  8. package/dist/cjs/authorization/index.mock.js.map +1 -1
  9. package/dist/cjs/authorization/organizationMemberAbility.mock.d.ts.map +1 -1
  10. package/dist/cjs/authorization/organizationMemberAbility.mock.js +1 -0
  11. package/dist/cjs/authorization/organizationMemberAbility.mock.js.map +1 -1
  12. package/dist/cjs/authorization/parseScopes.d.ts +3 -2
  13. package/dist/cjs/authorization/parseScopes.d.ts.map +1 -1
  14. package/dist/cjs/authorization/parseScopes.js +17 -8
  15. package/dist/cjs/authorization/parseScopes.js.map +1 -1
  16. package/dist/cjs/authorization/parseScopes.test.js +9 -14
  17. package/dist/cjs/authorization/parseScopes.test.js.map +1 -1
  18. package/dist/cjs/authorization/projectMemberAbility.mock.d.ts.map +1 -1
  19. package/dist/cjs/authorization/projectMemberAbility.mock.js +1 -0
  20. package/dist/cjs/authorization/projectMemberAbility.mock.js.map +1 -1
  21. package/dist/cjs/authorization/roleToScopeMapping.d.ts +19 -0
  22. package/dist/cjs/authorization/roleToScopeMapping.d.ts.map +1 -0
  23. package/dist/cjs/authorization/roleToScopeMapping.js +163 -0
  24. package/dist/cjs/authorization/roleToScopeMapping.js.map +1 -0
  25. package/dist/cjs/authorization/roleToScopeMapping.test.d.ts +2 -0
  26. package/dist/cjs/authorization/roleToScopeMapping.test.d.ts.map +1 -0
  27. package/dist/cjs/authorization/roleToScopeMapping.test.js +549 -0
  28. package/dist/cjs/authorization/roleToScopeMapping.test.js.map +1 -0
  29. package/dist/cjs/authorization/roleToScopeMapping.testUtils.d.ts +1393 -0
  30. package/dist/cjs/authorization/roleToScopeMapping.testUtils.d.ts.map +1 -0
  31. package/dist/cjs/authorization/roleToScopeMapping.testUtils.js +329 -0
  32. package/dist/cjs/authorization/roleToScopeMapping.testUtils.js.map +1 -0
  33. package/dist/cjs/authorization/scopeAbilityBuilder.d.ts +14 -8
  34. package/dist/cjs/authorization/scopeAbilityBuilder.d.ts.map +1 -1
  35. package/dist/cjs/authorization/scopeAbilityBuilder.js +7 -7
  36. package/dist/cjs/authorization/scopeAbilityBuilder.js.map +1 -1
  37. package/dist/cjs/authorization/scopeAbilityBuilder.test.js +258 -185
  38. package/dist/cjs/authorization/scopeAbilityBuilder.test.js.map +1 -1
  39. package/dist/cjs/authorization/scopes.d.ts.map +1 -1
  40. package/dist/cjs/authorization/scopes.js +132 -187
  41. package/dist/cjs/authorization/scopes.js.map +1 -1
  42. package/dist/cjs/ee/AiAgent/schemas/tools/index.d.ts +1 -0
  43. package/dist/cjs/ee/AiAgent/schemas/tools/index.d.ts.map +1 -1
  44. package/dist/cjs/ee/AiAgent/schemas/tools/index.js +1 -0
  45. package/dist/cjs/ee/AiAgent/schemas/tools/index.js.map +1 -1
  46. package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +2845 -0
  47. package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -0
  48. package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js +41 -0
  49. package/dist/cjs/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js.map +1 -0
  50. package/dist/cjs/types/organizationMemberProfile.d.ts +1 -0
  51. package/dist/cjs/types/organizationMemberProfile.d.ts.map +1 -1
  52. package/dist/cjs/types/organizationMemberProfile.js.map +1 -1
  53. package/dist/cjs/types/projectMemberProfile.d.ts +1 -0
  54. package/dist/cjs/types/projectMemberProfile.d.ts.map +1 -1
  55. package/dist/cjs/types/scopes.d.ts +19 -9
  56. package/dist/cjs/types/scopes.d.ts.map +1 -1
  57. package/dist/cjs/types/search.d.ts +20 -0
  58. package/dist/cjs/types/search.d.ts.map +1 -1
  59. package/dist/cjs/types/search.js.map +1 -1
  60. package/dist/cjs/types/user.d.ts +1 -0
  61. package/dist/cjs/types/user.d.ts.map +1 -1
  62. package/dist/cjs/types/user.js.map +1 -1
  63. package/dist/esm/authorization/index.d.ts +8 -4
  64. package/dist/esm/authorization/index.d.ts.map +1 -1
  65. package/dist/esm/authorization/index.js +26 -3
  66. package/dist/esm/authorization/index.js.map +1 -1
  67. package/dist/esm/authorization/index.mock.d.ts +2 -0
  68. package/dist/esm/authorization/index.mock.d.ts.map +1 -1
  69. package/dist/esm/authorization/index.mock.js +2 -0
  70. package/dist/esm/authorization/index.mock.js.map +1 -1
  71. package/dist/esm/authorization/organizationMemberAbility.mock.d.ts.map +1 -1
  72. package/dist/esm/authorization/organizationMemberAbility.mock.js +1 -0
  73. package/dist/esm/authorization/organizationMemberAbility.mock.js.map +1 -1
  74. package/dist/esm/authorization/parseScopes.d.ts +3 -2
  75. package/dist/esm/authorization/parseScopes.d.ts.map +1 -1
  76. package/dist/esm/authorization/parseScopes.js +15 -7
  77. package/dist/esm/authorization/parseScopes.js.map +1 -1
  78. package/dist/esm/authorization/parseScopes.test.js +9 -14
  79. package/dist/esm/authorization/parseScopes.test.js.map +1 -1
  80. package/dist/esm/authorization/projectMemberAbility.mock.d.ts.map +1 -1
  81. package/dist/esm/authorization/projectMemberAbility.mock.js +1 -0
  82. package/dist/esm/authorization/projectMemberAbility.mock.js.map +1 -1
  83. package/dist/esm/authorization/roleToScopeMapping.d.ts +19 -0
  84. package/dist/esm/authorization/roleToScopeMapping.d.ts.map +1 -0
  85. package/dist/esm/authorization/roleToScopeMapping.js +157 -0
  86. package/dist/esm/authorization/roleToScopeMapping.js.map +1 -0
  87. package/dist/esm/authorization/roleToScopeMapping.test.d.ts +2 -0
  88. package/dist/esm/authorization/roleToScopeMapping.test.d.ts.map +1 -0
  89. package/dist/esm/authorization/roleToScopeMapping.test.js +547 -0
  90. package/dist/esm/authorization/roleToScopeMapping.test.js.map +1 -0
  91. package/dist/esm/authorization/roleToScopeMapping.testUtils.d.ts +1393 -0
  92. package/dist/esm/authorization/roleToScopeMapping.testUtils.d.ts.map +1 -0
  93. package/dist/esm/authorization/roleToScopeMapping.testUtils.js +319 -0
  94. package/dist/esm/authorization/roleToScopeMapping.testUtils.js.map +1 -0
  95. package/dist/esm/authorization/scopeAbilityBuilder.d.ts +14 -8
  96. package/dist/esm/authorization/scopeAbilityBuilder.d.ts.map +1 -1
  97. package/dist/esm/authorization/scopeAbilityBuilder.js +7 -7
  98. package/dist/esm/authorization/scopeAbilityBuilder.js.map +1 -1
  99. package/dist/esm/authorization/scopeAbilityBuilder.test.js +259 -186
  100. package/dist/esm/authorization/scopeAbilityBuilder.test.js.map +1 -1
  101. package/dist/esm/authorization/scopes.d.ts.map +1 -1
  102. package/dist/esm/authorization/scopes.js +132 -187
  103. package/dist/esm/authorization/scopes.js.map +1 -1
  104. package/dist/esm/ee/AiAgent/schemas/tools/index.d.ts +1 -0
  105. package/dist/esm/ee/AiAgent/schemas/tools/index.d.ts.map +1 -1
  106. package/dist/esm/ee/AiAgent/schemas/tools/index.js +1 -0
  107. package/dist/esm/ee/AiAgent/schemas/tools/index.js.map +1 -1
  108. package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +2845 -0
  109. package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -0
  110. package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js +38 -0
  111. package/dist/esm/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.js.map +1 -0
  112. package/dist/esm/types/organizationMemberProfile.d.ts +1 -0
  113. package/dist/esm/types/organizationMemberProfile.d.ts.map +1 -1
  114. package/dist/esm/types/organizationMemberProfile.js.map +1 -1
  115. package/dist/esm/types/projectMemberProfile.d.ts +1 -0
  116. package/dist/esm/types/projectMemberProfile.d.ts.map +1 -1
  117. package/dist/esm/types/scopes.d.ts +19 -9
  118. package/dist/esm/types/scopes.d.ts.map +1 -1
  119. package/dist/esm/types/search.d.ts +20 -0
  120. package/dist/esm/types/search.d.ts.map +1 -1
  121. package/dist/esm/types/search.js.map +1 -1
  122. package/dist/esm/types/user.d.ts +1 -0
  123. package/dist/esm/types/user.d.ts.map +1 -1
  124. package/dist/esm/types/user.js.map +1 -1
  125. package/dist/tsconfig.types.tsbuildinfo +1 -1
  126. package/dist/types/authorization/index.d.ts +8 -4
  127. package/dist/types/authorization/index.d.ts.map +1 -1
  128. package/dist/types/authorization/index.mock.d.ts +2 -0
  129. package/dist/types/authorization/index.mock.d.ts.map +1 -1
  130. package/dist/types/authorization/organizationMemberAbility.mock.d.ts.map +1 -1
  131. package/dist/types/authorization/parseScopes.d.ts +3 -2
  132. package/dist/types/authorization/parseScopes.d.ts.map +1 -1
  133. package/dist/types/authorization/projectMemberAbility.mock.d.ts.map +1 -1
  134. package/dist/types/authorization/roleToScopeMapping.d.ts +19 -0
  135. package/dist/types/authorization/roleToScopeMapping.d.ts.map +1 -0
  136. package/dist/types/authorization/roleToScopeMapping.test.d.ts +2 -0
  137. package/dist/types/authorization/roleToScopeMapping.test.d.ts.map +1 -0
  138. package/dist/types/authorization/roleToScopeMapping.testUtils.d.ts +1393 -0
  139. package/dist/types/authorization/roleToScopeMapping.testUtils.d.ts.map +1 -0
  140. package/dist/types/authorization/scopeAbilityBuilder.d.ts +14 -8
  141. package/dist/types/authorization/scopeAbilityBuilder.d.ts.map +1 -1
  142. package/dist/types/authorization/scopes.d.ts.map +1 -1
  143. package/dist/types/ee/AiAgent/schemas/tools/index.d.ts +1 -0
  144. package/dist/types/ee/AiAgent/schemas/tools/index.d.ts.map +1 -1
  145. package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts +2845 -0
  146. package/dist/types/ee/AiAgent/schemas/tools/toolSearchFieldValuesArgs.d.ts.map +1 -0
  147. package/dist/types/types/organizationMemberProfile.d.ts +1 -0
  148. package/dist/types/types/organizationMemberProfile.d.ts.map +1 -1
  149. package/dist/types/types/projectMemberProfile.d.ts +1 -0
  150. package/dist/types/types/projectMemberProfile.d.ts.map +1 -1
  151. package/dist/types/types/scopes.d.ts +19 -9
  152. package/dist/types/types/scopes.d.ts.map +1 -1
  153. package/dist/types/types/search.d.ts +20 -0
  154. package/dist/types/types/search.d.ts.map +1 -1
  155. package/dist/types/types/user.d.ts +1 -0
  156. package/dist/types/types/user.d.ts.map +1 -1
  157. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roleToScopeMapping.testUtils.d.ts","sourceRoot":"","sources":["../../../src/authorization/roleToScopeMapping.testUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,329 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.debugRoleScopeMapping = exports.validateAllRoleMappings = exports.compareRoleAndScopeAbilities = exports.createRoleTestParams = exports.createStandardTestCases = exports.extractRolePermissions = exports.validateRoleInheritance = void 0;
4
+ /* eslint-disable no-console */
5
+ const ability_1 = require("@casl/ability");
6
+ const projectMemberRole_1 = require("../types/projectMemberRole");
7
+ const projectMemberAbility_1 = require("./projectMemberAbility");
8
+ const roleToScopeMapping_1 = require("./roleToScopeMapping");
9
+ const scopeAbilityBuilder_1 = require("./scopeAbilityBuilder");
10
+ /**
11
+ * Test utilities for role to scope mapping validation
12
+ * These functions are only used for testing migration compatibility
13
+ */
14
+ /**
15
+ * Validates that a role properly inherits permissions from lower roles
16
+ */
17
+ const validateRoleInheritance = () => {
18
+ const errors = [];
19
+ const roleOrder = [
20
+ projectMemberRole_1.ProjectMemberRole.VIEWER,
21
+ projectMemberRole_1.ProjectMemberRole.INTERACTIVE_VIEWER,
22
+ projectMemberRole_1.ProjectMemberRole.EDITOR,
23
+ projectMemberRole_1.ProjectMemberRole.DEVELOPER,
24
+ projectMemberRole_1.ProjectMemberRole.ADMIN,
25
+ ];
26
+ for (let i = 1; i < roleOrder.length; i += 1) {
27
+ const currentRole = roleOrder[i];
28
+ const previousRole = roleOrder[i - 1];
29
+ const currentScopes = new Set((0, roleToScopeMapping_1.getScopesForRole)(currentRole));
30
+ const previousScopes = (0, roleToScopeMapping_1.getScopesForRole)(previousRole);
31
+ // Check that all previous scopes are included in current role
32
+ for (const scope of previousScopes) {
33
+ if (!currentScopes.has(scope)) {
34
+ errors.push(`Role ${currentRole} is missing inherited scope: ${scope} from ${previousRole}`);
35
+ }
36
+ }
37
+ }
38
+ return {
39
+ valid: errors.length === 0,
40
+ errors,
41
+ };
42
+ };
43
+ exports.validateRoleInheritance = validateRoleInheritance;
44
+ /**
45
+ * Extracts the actual permissions granted by a role builder for analysis and comparison
46
+ * This is useful for debugging and validating that our scope mappings are correct
47
+ */
48
+ const extractRolePermissions = (role) => {
49
+ const builder = new ability_1.AbilityBuilder(ability_1.Ability);
50
+ const testMember = {
51
+ role,
52
+ projectUuid: 'test-project-uuid',
53
+ userUuid: 'test-user-uuid',
54
+ };
55
+ // Build the ability using the role-based system
56
+ projectMemberAbility_1.projectMemberAbilities[role](testMember, builder);
57
+ const ability = builder.build();
58
+ // Extract the rules for analysis
59
+ return {
60
+ rules: ability.rules.map((rule) => ({
61
+ action: rule.action,
62
+ subject: rule.subject,
63
+ conditions: rule.conditions,
64
+ inverted: rule.inverted,
65
+ reason: rule.reason,
66
+ })),
67
+ rawAbility: ability,
68
+ };
69
+ };
70
+ exports.extractRolePermissions = extractRolePermissions;
71
+ /**
72
+ * Helper function to create standardized test cases for role compatibility testing
73
+ */
74
+ const createStandardTestCases = () => [
75
+ // View permissions
76
+ {
77
+ action: 'view',
78
+ subject: 'Dashboard',
79
+ resource: {
80
+ organizationUuid: 'org-uuid-test',
81
+ projectUuid: 'test-project-uuid',
82
+ isPrivate: false,
83
+ },
84
+ },
85
+ {
86
+ action: 'view',
87
+ subject: 'SavedChart',
88
+ resource: {
89
+ organizationUuid: 'org-uuid-test',
90
+ projectUuid: 'test-project-uuid',
91
+ isPrivate: false,
92
+ },
93
+ },
94
+ {
95
+ action: 'view',
96
+ subject: 'Space',
97
+ resource: {
98
+ organizationUuid: 'org-uuid-test',
99
+ projectUuid: 'test-project-uuid',
100
+ isPrivate: false,
101
+ },
102
+ },
103
+ {
104
+ action: 'view',
105
+ subject: 'Project',
106
+ resource: { projectUuid: 'test-project-uuid' },
107
+ },
108
+ // Create permissions
109
+ {
110
+ action: 'create',
111
+ subject: 'Space',
112
+ resource: {
113
+ organizationUuid: 'org-uuid-test',
114
+ projectUuid: 'test-project-uuid',
115
+ },
116
+ },
117
+ {
118
+ action: 'create',
119
+ subject: 'DashboardComments',
120
+ resource: { projectUuid: 'test-project-uuid' },
121
+ },
122
+ {
123
+ action: 'create',
124
+ subject: 'ScheduledDeliveries',
125
+ resource: { projectUuid: 'test-project-uuid' },
126
+ },
127
+ // Manage permissions (varies by role level)
128
+ {
129
+ action: 'manage',
130
+ subject: 'Space',
131
+ resource: {
132
+ organizationUuid: 'org-uuid-test',
133
+ projectUuid: 'test-project-uuid',
134
+ isPrivate: false,
135
+ },
136
+ },
137
+ {
138
+ action: 'manage',
139
+ subject: 'Job',
140
+ resource: {},
141
+ },
142
+ {
143
+ action: 'manage',
144
+ subject: 'PinnedItems',
145
+ resource: {
146
+ organizationUuid: 'org-uuid-test',
147
+ projectUuid: 'test-project-uuid',
148
+ },
149
+ },
150
+ {
151
+ action: 'manage',
152
+ subject: 'Explore',
153
+ resource: { projectUuid: 'test-project-uuid' },
154
+ },
155
+ // Higher-level permissions (developer+ only)
156
+ {
157
+ action: 'manage',
158
+ subject: 'Project',
159
+ resource: { projectUuid: 'test-project-uuid' },
160
+ },
161
+ {
162
+ action: 'manage',
163
+ subject: 'Validation',
164
+ resource: { projectUuid: 'test-project-uuid' },
165
+ },
166
+ {
167
+ action: 'manage',
168
+ subject: 'VirtualView',
169
+ resource: { projectUuid: 'test-project-uuid' },
170
+ },
171
+ {
172
+ action: 'manage',
173
+ subject: 'CustomSql',
174
+ resource: { projectUuid: 'test-project-uuid' },
175
+ },
176
+ // Admin-only permissions
177
+ {
178
+ action: 'delete',
179
+ subject: 'Project',
180
+ resource: { projectUuid: 'test-project-uuid' },
181
+ },
182
+ {
183
+ action: 'view',
184
+ subject: 'Analytics',
185
+ resource: { projectUuid: 'test-project-uuid' },
186
+ },
187
+ ];
188
+ exports.createStandardTestCases = createStandardTestCases;
189
+ /**
190
+ * Helper function to create test parameters for role compatibility testing
191
+ */
192
+ const createRoleTestParams = (role, options = {}) => {
193
+ const { isEnterprise = false, projectUuid = 'test-project-uuid', userUuid = 'test-user-uuid', organizationUuid = 'test-org-uuid', } = options;
194
+ const scopes = isEnterprise
195
+ ? (0, roleToScopeMapping_1.getScopesForRole)(role)
196
+ : (0, roleToScopeMapping_1.getNonEnterpriseScopesForRole)(role);
197
+ const scopeBuilderParams = {
198
+ userUuid,
199
+ scopes,
200
+ isEnterprise,
201
+ organizationRole: 'editor',
202
+ permissionsConfig: {
203
+ pat: {
204
+ enabled: false,
205
+ allowedOrgRoles: [],
206
+ },
207
+ },
208
+ };
209
+ return {
210
+ role,
211
+ scopes,
212
+ projectMember: {
213
+ role,
214
+ projectUuid,
215
+ userUuid,
216
+ },
217
+ scopeOrgBuilderParams: {
218
+ ...scopeBuilderParams,
219
+ organizationUuid,
220
+ },
221
+ scopeProjectBuilderParams: {
222
+ ...scopeBuilderParams,
223
+ projectUuid,
224
+ },
225
+ };
226
+ };
227
+ exports.createRoleTestParams = createRoleTestParams;
228
+ /**
229
+ * Compares role-based and scope-based abilities for a specific set of test cases
230
+ * Returns detailed results showing which permissions match or differ
231
+ */
232
+ const compareRoleAndScopeAbilities = (role, testCases, options = {}) => {
233
+ const { isEnterprise = false } = options;
234
+ const testParams = (0, exports.createRoleTestParams)(role, { isEnterprise });
235
+ // Build role-based ability
236
+ const roleBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
237
+ projectMemberAbility_1.projectMemberAbilities[role](testParams.projectMember, roleBuilder);
238
+ const roleAbility = roleBuilder.build();
239
+ // Build Project-based scope-based ability
240
+ const scopeBuilder = new ability_1.AbilityBuilder(ability_1.Ability);
241
+ (0, scopeAbilityBuilder_1.buildAbilityFromScopes)(testParams.scopeProjectBuilderParams, scopeBuilder);
242
+ const scopeAbility = scopeBuilder.build();
243
+ const results = testCases.map((testCase) => {
244
+ const subjectWithResource = (0, ability_1.subject)(testCase.subject, testCase.resource);
245
+ const roleResult = roleAbility.can(testCase.action, subjectWithResource);
246
+ const scopeResult = scopeAbility.can(testCase.action, subjectWithResource);
247
+ return {
248
+ ...testCase,
249
+ roleResult,
250
+ scopeResult,
251
+ match: roleResult === scopeResult,
252
+ };
253
+ });
254
+ const summary = {
255
+ total: results.length,
256
+ matches: results.filter((r) => r.match).length,
257
+ mismatches: results.filter((r) => !r.match),
258
+ allMatch: results.every((r) => r.match),
259
+ };
260
+ return {
261
+ role,
262
+ scopes: testParams.scopes,
263
+ results,
264
+ summary,
265
+ };
266
+ };
267
+ exports.compareRoleAndScopeAbilities = compareRoleAndScopeAbilities;
268
+ /**
269
+ * Runs a comprehensive comparison of all roles against standard test cases
270
+ */
271
+ const validateAllRoleMappings = (options = {}) => {
272
+ const roles = [
273
+ projectMemberRole_1.ProjectMemberRole.VIEWER,
274
+ projectMemberRole_1.ProjectMemberRole.INTERACTIVE_VIEWER,
275
+ projectMemberRole_1.ProjectMemberRole.EDITOR,
276
+ projectMemberRole_1.ProjectMemberRole.DEVELOPER,
277
+ projectMemberRole_1.ProjectMemberRole.ADMIN,
278
+ ];
279
+ const testCases = (0, exports.createStandardTestCases)();
280
+ const results = roles.map((role) => (0, exports.compareRoleAndScopeAbilities)(role, testCases, options));
281
+ const overallSummary = {
282
+ rolesValidated: results.length,
283
+ successfulRoles: results
284
+ .filter((r) => r.summary.allMatch)
285
+ .map((r) => r.role),
286
+ failedRoles: results
287
+ .filter((r) => !r.summary.allMatch)
288
+ .map((r) => ({
289
+ role: r.role,
290
+ mismatches: r.summary.mismatches.length,
291
+ })),
292
+ totalTestCases: results.reduce((sum, r) => sum + r.summary.total, 0),
293
+ totalMatches: results.reduce((sum, r) => sum + r.summary.matches, 0),
294
+ };
295
+ return {
296
+ roleResults: results,
297
+ overallSummary,
298
+ allRolesValid: overallSummary.failedRoles.length === 0,
299
+ };
300
+ };
301
+ exports.validateAllRoleMappings = validateAllRoleMappings;
302
+ /**
303
+ * Debug utility to show what scopes are missing or extra for a specific role
304
+ */
305
+ const debugRoleScopeMapping = (role) => {
306
+ const testCases = (0, exports.createStandardTestCases)();
307
+ const comparison = (0, exports.compareRoleAndScopeAbilities)(role, testCases);
308
+ const mismatches = comparison.results.filter((r) => !r.match);
309
+ console.debug(`\n=== Debug: ${role} Role Scope Mapping ===`);
310
+ console.debug(`Scopes assigned: ${comparison.scopes.length}`);
311
+ console.debug(`Test cases: ${comparison.summary.total}`);
312
+ console.debug(`Matches: ${comparison.summary.matches}`);
313
+ console.debug(`Mismatches: ${mismatches.length}`);
314
+ if (mismatches.length > 0) {
315
+ console.debug('\n--- Mismatched Permissions ---');
316
+ mismatches.forEach((mismatch) => {
317
+ console.debug(`${mismatch.action}:${mismatch.subject}`);
318
+ console.debug(` Role-based: ${mismatch.roleResult}`);
319
+ console.debug(` Scope-based: ${mismatch.scopeResult}`);
320
+ console.debug(` Resource:`, mismatch.resource);
321
+ console.debug('');
322
+ });
323
+ }
324
+ console.debug(`\nAssigned Scopes:`);
325
+ comparison.scopes.forEach((scope) => console.debug(` - ${scope}`));
326
+ return comparison;
327
+ };
328
+ exports.debugRoleScopeMapping = debugRoleScopeMapping;
329
+ //# sourceMappingURL=roleToScopeMapping.testUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roleToScopeMapping.testUtils.js","sourceRoot":"","sources":["../../../src/authorization/roleToScopeMapping.testUtils.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,29 @@
1
+ import { type AbilityBuilder } from '@casl/ability';
1
2
  import { type MemberAbility } from './types';
2
- type BuilderOptions = {
3
+ type OptionalIdContext = {
3
4
  organizationUuid: string;
5
+ projectUuid?: never;
6
+ } | {
4
7
  projectUuid: string;
5
- userUuid?: string;
8
+ organizationUuid?: never;
9
+ };
10
+ type BuilderOptions = {
11
+ userUuid: string;
6
12
  scopes: string[];
7
- isEnterprise: boolean;
8
- organizationRole: string;
13
+ isEnterprise: boolean | undefined;
14
+ organizationRole?: string;
9
15
  permissionsConfig?: {
10
16
  pat: {
11
17
  enabled: boolean;
12
18
  allowedOrgRoles: string[];
13
19
  };
14
20
  };
15
- };
21
+ } & OptionalIdContext;
16
22
  /**
17
- * Build a complete CASL ability from scope names and context
23
+ * Apply CASL abilities from scopes to a builder
18
24
  * @param context - Context containing organization, project, user, and space access information
19
- * @returns CASL Ability with applied permissions
25
+ * @param builder - CASL ability builder to add permissions to
20
26
  */
21
- export declare const buildAbilityFromScopes: (context: BuilderOptions) => MemberAbility;
27
+ export declare const buildAbilityFromScopes: (context: BuilderOptions, builder: AbilityBuilder<MemberAbility>) => void;
22
28
  export {};
23
29
  //# sourceMappingURL=scopeAbilityBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scopeAbilityBuilder.d.ts","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAoD7C,KAAK,cAAc,GAAG;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE;QAChB,GAAG,EAAE;YACD,OAAO,EAAE,OAAO,CAAC;YACjB,eAAe,EAAE,MAAM,EAAE,CAAC;SAC7B,CAAC;KACL,CAAC;CACL,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACtB,cAAc,KACxB,aAcF,CAAC"}
1
+ {"version":3,"file":"scopeAbilityBuilder.d.ts","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAqD7C,KAAK,iBAAiB,GAChB;IACI,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;CACvB,GACD;IACI,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,KAAK,CAAC;CAC5B,CAAC;AAER,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE;QAChB,GAAG,EAAE;YACD,OAAO,EAAE,OAAO,CAAC;YACjB,eAAe,EAAE,MAAM,EAAE,CAAC;SAC7B,CAAC;KACL,CAAC;CACL,GAAG,iBAAiB,CAAC;AAEtB;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACtB,cAAc,WACd,cAAc,CAAC,aAAa,CAAC,KACvC,IAaF,CAAC"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildAbilityFromScopes = void 0;
4
- const ability_1 = require("@casl/ability");
5
4
  const parseScopes_1 = require("./parseScopes");
6
5
  const scopes_1 = require("./scopes");
7
6
  const handlePatConfigApplication = (context, builder) => {
@@ -9,6 +8,7 @@ const handlePatConfigApplication = (context, builder) => {
9
8
  const hasPatRule = builder.rules.find((rule) => rule.action === 'manage' && rule.subject === 'PersonalAccessToken');
10
9
  if (!hasPatRule &&
11
10
  pat?.enabled &&
11
+ context.organizationRole &&
12
12
  pat?.allowedOrgRoles?.includes(context.organizationRole)) {
13
13
  builder.can('manage', 'PersonalAccessToken');
14
14
  }
@@ -37,22 +37,22 @@ const applyScopeAbilities = (context, builder) => {
37
37
  handlePatConfigApplication(context, builder);
38
38
  };
39
39
  /**
40
- * Build a complete CASL ability from scope names and context
40
+ * Apply CASL abilities from scopes to a builder
41
41
  * @param context - Context containing organization, project, user, and space access information
42
- * @returns CASL Ability with applied permissions
42
+ * @param builder - CASL ability builder to add permissions to
43
43
  */
44
- const buildAbilityFromScopes = (context) => {
45
- const builder = new ability_1.AbilityBuilder(ability_1.Ability);
44
+ const buildAbilityFromScopes = (context, builder) => {
45
+ const isEnterprise = context.isEnterprise ?? false;
46
46
  const scopes = (0, parseScopes_1.parseScopes)({
47
47
  scopes: context.scopes,
48
- isEnterprise: context.isEnterprise,
48
+ isEnterprise,
49
49
  });
50
50
  const parsedContext = {
51
51
  ...context,
52
52
  scopes,
53
+ isEnterprise,
53
54
  };
54
55
  applyScopeAbilities(parsedContext, builder);
55
- return builder.build();
56
56
  };
57
57
  exports.buildAbilityFromScopes = buildAbilityFromScopes;
58
58
  //# sourceMappingURL=scopeAbilityBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scopeAbilityBuilder.js","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":";;;AAAA,2CAAwD;AAExD,+CAAwD;AACxD,qCAA0C;AAG1C,MAAM,0BAA0B,GAAG,CAC/B,OAAqB,EACrB,OAAsC,EACxC,EAAE;IACA,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,iBAAiB,IAAI,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,qBAAqB,CACzE,CAAC;IAEF,IACI,CAAC,UAAU;QACX,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC1D,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;AACL,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CACxB,OAAqB,EACrB,OAAsC,EAClC,EAAE;IACN,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAA,wBAAU,EAAC,SAAS,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa;YACtC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;YAC9B,CAAC,CAAC,EAAE,CAAC;QAET,2BAA2B;QAC3B,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC;AAiBF;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,CAClC,OAAuB,EACV,EAAE;IACf,MAAM,OAAO,GAAG,IAAI,wBAAc,CAAgB,iBAAO,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,OAAO,CAAC,YAAY;KACrC,CAAC,CAAC;IACH,MAAM,aAAa,GAAG;QAClB,GAAG,OAAO;QACV,MAAM;KACT,CAAC;IAEF,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC,CAAC;AAhBW,QAAA,sBAAsB,0BAgBjC"}
1
+ {"version":3,"file":"scopeAbilityBuilder.js","sourceRoot":"","sources":["../../../src/authorization/scopeAbilityBuilder.ts"],"names":[],"mappings":";;;AAEA,+CAAwD;AACxD,qCAA0C;AAG1C,MAAM,0BAA0B,GAAG,CAC/B,OAAqB,EACrB,OAAsC,EACxC,EAAE;IACA,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,iBAAiB,IAAI,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,qBAAqB,CACzE,CAAC;IAEF,IACI,CAAC,UAAU;QACX,GAAG,EAAE,OAAO;QACZ,OAAO,CAAC,gBAAgB;QACxB,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC1D,CAAC;QACC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;AACL,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CACxB,OAAqB,EACrB,OAAsC,EAClC,EAAE;IACN,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAA,wBAAU,EAAC,SAAS,CAAC,CAAC;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa;YACtC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;YAC9B,CAAC,CAAC,EAAE,CAAC;QAET,2BAA2B;QAC3B,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC;AAyBF;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,CAClC,OAAuB,EACvB,OAAsC,EAClC,EAAE;IACN,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;IACnD,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY;KACf,CAAC,CAAC;IACH,MAAM,aAAa,GAAG;QAClB,GAAG,OAAO;QACV,MAAM;QACN,YAAY;KACf,CAAC;IAEF,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC;AAhBW,QAAA,sBAAsB,0BAgBjC"}