@lightdash/common 0.2438.0 → 0.2439.0

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 (52) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/authorization/space/spaceAccessResolver.d.ts +4 -0
  3. package/dist/cjs/authorization/space/spaceAccessResolver.d.ts.map +1 -0
  4. package/dist/cjs/authorization/space/spaceAccessResolver.js +104 -0
  5. package/dist/cjs/authorization/space/spaceAccessResolver.js.map +1 -0
  6. package/dist/cjs/authorization/space/spaceAccessResolver.test.d.ts +2 -0
  7. package/dist/cjs/authorization/space/spaceAccessResolver.test.d.ts.map +1 -0
  8. package/dist/cjs/authorization/space/spaceAccessResolver.test.js +486 -0
  9. package/dist/cjs/authorization/space/spaceAccessResolver.test.js.map +1 -0
  10. package/dist/cjs/index.d.ts +1 -0
  11. package/dist/cjs/index.d.ts.map +1 -1
  12. package/dist/cjs/index.js +1 -0
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/types/space.d.ts +38 -0
  15. package/dist/cjs/types/space.d.ts.map +1 -1
  16. package/dist/cjs/types/space.js +12 -1
  17. package/dist/cjs/types/space.js.map +1 -1
  18. package/dist/esm/.tsbuildinfo +1 -1
  19. package/dist/esm/authorization/space/spaceAccessResolver.d.ts +4 -0
  20. package/dist/esm/authorization/space/spaceAccessResolver.d.ts.map +1 -0
  21. package/dist/esm/authorization/space/spaceAccessResolver.js +100 -0
  22. package/dist/esm/authorization/space/spaceAccessResolver.js.map +1 -0
  23. package/dist/esm/authorization/space/spaceAccessResolver.test.d.ts +2 -0
  24. package/dist/esm/authorization/space/spaceAccessResolver.test.d.ts.map +1 -0
  25. package/dist/esm/authorization/space/spaceAccessResolver.test.js +484 -0
  26. package/dist/esm/authorization/space/spaceAccessResolver.test.js.map +1 -0
  27. package/dist/esm/index.d.ts +1 -0
  28. package/dist/esm/index.d.ts.map +1 -1
  29. package/dist/esm/index.js +1 -0
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/types/space.d.ts +38 -0
  32. package/dist/esm/types/space.d.ts.map +1 -1
  33. package/dist/esm/types/space.js +11 -0
  34. package/dist/esm/types/space.js.map +1 -1
  35. package/dist/types/.tsbuildinfo +1 -1
  36. package/dist/types/authorization/space/spaceAccessResolver.d.ts +4 -0
  37. package/dist/types/authorization/space/spaceAccessResolver.d.ts.map +1 -0
  38. package/dist/types/authorization/space/spaceAccessResolver.js +100 -0
  39. package/dist/types/authorization/space/spaceAccessResolver.js.map +1 -0
  40. package/dist/types/authorization/space/spaceAccessResolver.test.d.ts +2 -0
  41. package/dist/types/authorization/space/spaceAccessResolver.test.d.ts.map +1 -0
  42. package/dist/types/authorization/space/spaceAccessResolver.test.js +484 -0
  43. package/dist/types/authorization/space/spaceAccessResolver.test.js.map +1 -0
  44. package/dist/types/index.d.ts +1 -0
  45. package/dist/types/index.d.ts.map +1 -1
  46. package/dist/types/index.js +1 -0
  47. package/dist/types/index.js.map +1 -1
  48. package/dist/types/types/space.d.ts +38 -0
  49. package/dist/types/types/space.d.ts.map +1 -1
  50. package/dist/types/types/space.js +11 -0
  51. package/dist/types/types/space.js.map +1 -1
  52. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import { type SpaceAccessInput, type SpaceShare } from '../../types/space';
2
+ export type SpaceAccess = Pick<SpaceShare, 'userUuid' | 'role' | 'hasDirectAccess' | 'inheritedFrom' | 'projectRole' | 'inheritedRole'>;
3
+ export declare const resolveSpaceAccess: (input: SpaceAccessInput) => SpaceAccess[];
4
+ //# sourceMappingURL=spaceAccessResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaceAccessResolver.d.ts","sourceRoot":"","sources":["../../../../src/authorization/space/spaceAccessResolver.ts"],"names":[],"mappings":"AAOA,OAAO,EAOH,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAClB,MAAM,mBAAmB,CAAC;AAS3B,MAAM,MAAM,WAAW,GAAG,IAAI,CAC1B,UAAU,EACR,UAAU,GACV,MAAM,GACN,iBAAiB,GACjB,eAAe,GACf,aAAa,GACb,eAAe,CACpB,CAAC;AA8JF,eAAO,MAAM,kBAAkB,UAAW,gBAAgB,KAAG,WAAW,EAavE,CAAC"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveSpaceAccess = void 0;
4
+ const projectMemberRole_1 = require("../../types/projectMemberRole");
5
+ const space_1 = require("../../types/space");
6
+ const projectMemberRole_2 = require("../../utils/projectMemberRole");
7
+ const getUserOrganizationRole = (organizationAccess, userUuid) => {
8
+ const userOrgAccess = organizationAccess.filter((a) => a.userUuid === userUuid);
9
+ return {
10
+ type: 'organization',
11
+ role: userOrgAccess.length > 0
12
+ ? (0, projectMemberRole_2.convertOrganizationRoleToProjectRole)(userOrgAccess[0].role)
13
+ : undefined,
14
+ };
15
+ };
16
+ const getUserProjectRole = (projectAccess, userUuid) => {
17
+ const userProjectAccess = projectAccess.filter((a) => a.userUuid === userUuid &&
18
+ a.from === space_1.ProjectSpaceAccessOrigin.PROJECT_MEMBERSHIP);
19
+ return {
20
+ type: 'project',
21
+ role: userProjectAccess.length > 0
22
+ ? userProjectAccess[0].role
23
+ : undefined,
24
+ };
25
+ };
26
+ const getUserProjectGroupRoles = (projectAccess, userUuid) => {
27
+ const userProjectGroups = projectAccess.filter((a) => a.userUuid === userUuid &&
28
+ a.from === space_1.ProjectSpaceAccessOrigin.GROUP_MEMBERSHIP);
29
+ return userProjectGroups.map((entry) => ({
30
+ type: 'group',
31
+ role: entry.role,
32
+ }));
33
+ };
34
+ const getUserDirectGroupAccess = (directAccess, userUuid) => {
35
+ const userDirectGroups = directAccess.filter((a) => a.userUuid === userUuid &&
36
+ a.from === space_1.DirectSpaceAccessOrigin.GROUP_ACCESS);
37
+ return userDirectGroups.map((entry) => ({
38
+ type: 'space_group',
39
+ role: (0, projectMemberRole_2.convertSpaceRoleToProjectRole)(entry.role),
40
+ }));
41
+ };
42
+ const getSpaceRole = (highestRole, userDirectAccess, isPrivate) => {
43
+ const userAccessEntries = userDirectAccess.filter((a) => a.from === space_1.DirectSpaceAccessOrigin.USER_ACCESS);
44
+ const groupAccessEntries = userDirectAccess.filter((a) => a.from === space_1.DirectSpaceAccessOrigin.GROUP_ACCESS);
45
+ const hasDirectAccess = userDirectAccess.length > 0;
46
+ if (highestRole === projectMemberRole_1.ProjectMemberRole.ADMIN) {
47
+ return space_1.SpaceMemberRole.ADMIN;
48
+ }
49
+ if (hasDirectAccess) {
50
+ // If user has explicit user role in space, use that; otherwise use highest group role
51
+ const userSpaceRole = userAccessEntries.length > 0
52
+ ? userAccessEntries[0].role
53
+ : undefined;
54
+ return (userSpaceRole ??
55
+ (0, projectMemberRole_2.getHighestSpaceRole)(groupAccessEntries.map((e) => e.role)));
56
+ }
57
+ if (!isPrivate) {
58
+ return (0, projectMemberRole_2.convertProjectRoleToSpaceRole)(highestRole);
59
+ }
60
+ return undefined;
61
+ };
62
+ const resolveUserSpaceAccess = (userUuid, input) => {
63
+ const { isPrivate, directAccess, projectAccess, organizationAccess } = input;
64
+ const organizationRole = getUserOrganizationRole(organizationAccess, userUuid);
65
+ const projectRole = getUserProjectRole(projectAccess, userUuid);
66
+ const groupRoles = getUserProjectGroupRoles(projectAccess, userUuid);
67
+ const spaceGroupAccessRoles = getUserDirectGroupAccess(directAccess, userUuid);
68
+ // Compute highest role across all sources
69
+ const highestRole = (0, projectMemberRole_2.getHighestProjectRole)([
70
+ organizationRole,
71
+ projectRole,
72
+ ...groupRoles,
73
+ ...spaceGroupAccessRoles,
74
+ ]);
75
+ if (!highestRole)
76
+ return undefined;
77
+ const userDirectAccess = directAccess.filter((a) => a.userUuid === userUuid);
78
+ const spaceRole = getSpaceRole(highestRole.role, userDirectAccess, isPrivate);
79
+ if (!spaceRole)
80
+ return undefined;
81
+ // Compute highest project role (org + direct project membership only)
82
+ const highestProjectRole = (0, projectMemberRole_2.getHighestProjectRole)([
83
+ organizationRole,
84
+ projectRole,
85
+ ]);
86
+ return {
87
+ userUuid,
88
+ role: spaceRole,
89
+ hasDirectAccess: userDirectAccess.length > 0,
90
+ inheritedRole: highestRole.role,
91
+ inheritedFrom: highestRole.type,
92
+ projectRole: highestProjectRole?.role,
93
+ };
94
+ };
95
+ const resolveSpaceAccess = (input) => {
96
+ const { directAccess, projectAccess, organizationAccess } = input;
97
+ // Collect all unique user UUIDs
98
+ const uniqueUserUuids = new Set([...directAccess, ...projectAccess, ...organizationAccess].map((e) => e.userUuid));
99
+ return Array.from(uniqueUserUuids)
100
+ .map((userUuid) => resolveUserSpaceAccess(userUuid, input))
101
+ .filter((share) => share !== undefined);
102
+ };
103
+ exports.resolveSpaceAccess = resolveSpaceAccess;
104
+ //# sourceMappingURL=spaceAccessResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaceAccessResolver.js","sourceRoot":"","sources":["../../../../src/authorization/space/spaceAccessResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=spaceAccessResolver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaceAccessResolver.test.d.ts","sourceRoot":"","sources":["../../../../src/authorization/space/spaceAccessResolver.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const organizationMemberProfile_1 = require("../../types/organizationMemberProfile");
4
+ const projectMemberRole_1 = require("../../types/projectMemberRole");
5
+ const space_1 = require("../../types/space");
6
+ const spaceAccessResolver_1 = require("./spaceAccessResolver");
7
+ const makeInput = (overrides = {}) => ({
8
+ spaceUuid: 'space-1',
9
+ isPrivate: false,
10
+ directAccess: [],
11
+ projectAccess: [],
12
+ organizationAccess: [],
13
+ ...overrides,
14
+ });
15
+ describe('resolveSpaceAccess', () => {
16
+ it('returns empty array for empty inputs', () => {
17
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput());
18
+ expect(result).toEqual([]);
19
+ });
20
+ describe('admin override', () => {
21
+ it('org admin gets space ADMIN', () => {
22
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
23
+ organizationAccess: [
24
+ {
25
+ userUuid: 'user-1',
26
+ spaceUuid: 'space-1',
27
+ role: organizationMemberProfile_1.OrganizationMemberRole.ADMIN,
28
+ },
29
+ ],
30
+ }));
31
+ expect(result).toHaveLength(1);
32
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.ADMIN);
33
+ expect(result[0].inheritedFrom).toBe('organization');
34
+ });
35
+ it('project admin gets space ADMIN', () => {
36
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
37
+ organizationAccess: [
38
+ {
39
+ userUuid: 'user-1',
40
+ spaceUuid: 'space-1',
41
+ role: organizationMemberProfile_1.OrganizationMemberRole.MEMBER,
42
+ },
43
+ ],
44
+ projectAccess: [
45
+ {
46
+ userUuid: 'user-1',
47
+ spaceUuid: 'space-1',
48
+ role: projectMemberRole_1.ProjectMemberRole.ADMIN,
49
+ from: space_1.ProjectSpaceAccessOrigin.PROJECT_MEMBERSHIP,
50
+ },
51
+ ],
52
+ }));
53
+ expect(result).toHaveLength(1);
54
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.ADMIN);
55
+ });
56
+ it('group admin (project group) gets space ADMIN', () => {
57
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
58
+ organizationAccess: [
59
+ {
60
+ userUuid: 'user-1',
61
+ spaceUuid: 'space-1',
62
+ role: organizationMemberProfile_1.OrganizationMemberRole.MEMBER,
63
+ },
64
+ ],
65
+ projectAccess: [
66
+ {
67
+ userUuid: 'user-1',
68
+ spaceUuid: 'space-1',
69
+ role: projectMemberRole_1.ProjectMemberRole.ADMIN,
70
+ from: space_1.ProjectSpaceAccessOrigin.GROUP_MEMBERSHIP,
71
+ },
72
+ ],
73
+ }));
74
+ expect(result).toHaveLength(1);
75
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.ADMIN);
76
+ });
77
+ it('admin can access private space even without direct access', () => {
78
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
79
+ isPrivate: true,
80
+ organizationAccess: [
81
+ {
82
+ userUuid: 'user-1',
83
+ spaceUuid: 'space-1',
84
+ role: organizationMemberProfile_1.OrganizationMemberRole.ADMIN,
85
+ },
86
+ ],
87
+ }));
88
+ expect(result).toHaveLength(1);
89
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.ADMIN);
90
+ });
91
+ });
92
+ describe('direct access', () => {
93
+ it('USER_ACCESS role used directly', () => {
94
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
95
+ organizationAccess: [
96
+ {
97
+ userUuid: 'user-1',
98
+ spaceUuid: 'space-1',
99
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
100
+ },
101
+ ],
102
+ directAccess: [
103
+ {
104
+ userUuid: 'user-1',
105
+ spaceUuid: 'space-1',
106
+ role: space_1.SpaceMemberRole.EDITOR,
107
+ from: space_1.DirectSpaceAccessOrigin.USER_ACCESS,
108
+ },
109
+ ],
110
+ }));
111
+ expect(result).toHaveLength(1);
112
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.EDITOR);
113
+ expect(result[0].hasDirectAccess).toBe(true);
114
+ });
115
+ it('GROUP_ACCESS role used when no user role', () => {
116
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
117
+ organizationAccess: [
118
+ {
119
+ userUuid: 'user-1',
120
+ spaceUuid: 'space-1',
121
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
122
+ },
123
+ ],
124
+ directAccess: [
125
+ {
126
+ userUuid: 'user-1',
127
+ spaceUuid: 'space-1',
128
+ role: space_1.SpaceMemberRole.EDITOR,
129
+ from: space_1.DirectSpaceAccessOrigin.GROUP_ACCESS,
130
+ },
131
+ ],
132
+ }));
133
+ expect(result).toHaveLength(1);
134
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.EDITOR);
135
+ expect(result[0].hasDirectAccess).toBe(true);
136
+ });
137
+ it('user + group direct access: user role wins when higher', () => {
138
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
139
+ organizationAccess: [
140
+ {
141
+ userUuid: 'user-1',
142
+ spaceUuid: 'space-1',
143
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
144
+ },
145
+ ],
146
+ directAccess: [
147
+ {
148
+ userUuid: 'user-1',
149
+ spaceUuid: 'space-1',
150
+ role: space_1.SpaceMemberRole.EDITOR,
151
+ from: space_1.DirectSpaceAccessOrigin.USER_ACCESS,
152
+ },
153
+ {
154
+ userUuid: 'user-1',
155
+ spaceUuid: 'space-1',
156
+ role: space_1.SpaceMemberRole.VIEWER,
157
+ from: space_1.DirectSpaceAccessOrigin.GROUP_ACCESS,
158
+ },
159
+ ],
160
+ }));
161
+ expect(result).toHaveLength(1);
162
+ // User access takes precedence over group access
163
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.EDITOR);
164
+ });
165
+ });
166
+ describe('public space inheritance', () => {
167
+ it('viewer gets viewer space role', () => {
168
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
169
+ isPrivate: false,
170
+ organizationAccess: [
171
+ {
172
+ userUuid: 'user-1',
173
+ spaceUuid: 'space-1',
174
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
175
+ },
176
+ ],
177
+ }));
178
+ expect(result).toHaveLength(1);
179
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.VIEWER);
180
+ expect(result[0].hasDirectAccess).toBe(false);
181
+ expect(result[0].inheritedFrom).toBe('organization');
182
+ });
183
+ it('editor gets editor space role', () => {
184
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
185
+ isPrivate: false,
186
+ organizationAccess: [
187
+ {
188
+ userUuid: 'user-1',
189
+ spaceUuid: 'space-1',
190
+ role: organizationMemberProfile_1.OrganizationMemberRole.EDITOR,
191
+ },
192
+ ],
193
+ }));
194
+ expect(result).toHaveLength(1);
195
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.EDITOR);
196
+ });
197
+ it('developer gets editor space role', () => {
198
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
199
+ isPrivate: false,
200
+ organizationAccess: [
201
+ {
202
+ userUuid: 'user-1',
203
+ spaceUuid: 'space-1',
204
+ role: organizationMemberProfile_1.OrganizationMemberRole.DEVELOPER,
205
+ },
206
+ ],
207
+ }));
208
+ expect(result).toHaveLength(1);
209
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.EDITOR);
210
+ });
211
+ it('interactive_viewer gets viewer space role', () => {
212
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
213
+ isPrivate: false,
214
+ organizationAccess: [
215
+ {
216
+ userUuid: 'user-1',
217
+ spaceUuid: 'space-1',
218
+ role: organizationMemberProfile_1.OrganizationMemberRole.INTERACTIVE_VIEWER,
219
+ },
220
+ ],
221
+ }));
222
+ expect(result).toHaveLength(1);
223
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.VIEWER);
224
+ });
225
+ });
226
+ describe('private space exclusion', () => {
227
+ it('non-admin without direct access excluded from private space', () => {
228
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
229
+ isPrivate: true,
230
+ organizationAccess: [
231
+ {
232
+ userUuid: 'user-1',
233
+ spaceUuid: 'space-1',
234
+ role: organizationMemberProfile_1.OrganizationMemberRole.EDITOR,
235
+ },
236
+ ],
237
+ }));
238
+ expect(result).toHaveLength(0);
239
+ });
240
+ it('private space with direct access works', () => {
241
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
242
+ isPrivate: true,
243
+ organizationAccess: [
244
+ {
245
+ userUuid: 'user-1',
246
+ spaceUuid: 'space-1',
247
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
248
+ },
249
+ ],
250
+ directAccess: [
251
+ {
252
+ userUuid: 'user-1',
253
+ spaceUuid: 'space-1',
254
+ role: space_1.SpaceMemberRole.EDITOR,
255
+ from: space_1.DirectSpaceAccessOrigin.USER_ACCESS,
256
+ },
257
+ ],
258
+ }));
259
+ expect(result).toHaveLength(1);
260
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.EDITOR);
261
+ });
262
+ });
263
+ describe('org MEMBER role', () => {
264
+ it('org MEMBER with no other access is excluded', () => {
265
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
266
+ isPrivate: false,
267
+ organizationAccess: [
268
+ {
269
+ userUuid: 'user-1',
270
+ spaceUuid: 'space-1',
271
+ role: organizationMemberProfile_1.OrganizationMemberRole.MEMBER,
272
+ },
273
+ ],
274
+ }));
275
+ // MEMBER converts to undefined project role, so no highest role → excluded
276
+ expect(result).toHaveLength(0);
277
+ });
278
+ it('org MEMBER with project access is included', () => {
279
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
280
+ isPrivate: false,
281
+ organizationAccess: [
282
+ {
283
+ userUuid: 'user-1',
284
+ spaceUuid: 'space-1',
285
+ role: organizationMemberProfile_1.OrganizationMemberRole.MEMBER,
286
+ },
287
+ ],
288
+ projectAccess: [
289
+ {
290
+ userUuid: 'user-1',
291
+ spaceUuid: 'space-1',
292
+ role: projectMemberRole_1.ProjectMemberRole.EDITOR,
293
+ from: space_1.ProjectSpaceAccessOrigin.PROJECT_MEMBERSHIP,
294
+ },
295
+ ],
296
+ }));
297
+ expect(result).toHaveLength(1);
298
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.EDITOR);
299
+ });
300
+ });
301
+ describe('multiple group roles', () => {
302
+ it('highest group role wins', () => {
303
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
304
+ isPrivate: false,
305
+ organizationAccess: [
306
+ {
307
+ userUuid: 'user-1',
308
+ spaceUuid: 'space-1',
309
+ role: organizationMemberProfile_1.OrganizationMemberRole.MEMBER,
310
+ },
311
+ ],
312
+ projectAccess: [
313
+ {
314
+ userUuid: 'user-1',
315
+ spaceUuid: 'space-1',
316
+ role: projectMemberRole_1.ProjectMemberRole.VIEWER,
317
+ from: space_1.ProjectSpaceAccessOrigin.GROUP_MEMBERSHIP,
318
+ },
319
+ {
320
+ userUuid: 'user-1',
321
+ spaceUuid: 'space-1',
322
+ role: projectMemberRole_1.ProjectMemberRole.EDITOR,
323
+ from: space_1.ProjectSpaceAccessOrigin.GROUP_MEMBERSHIP,
324
+ },
325
+ ],
326
+ }));
327
+ expect(result).toHaveLength(1);
328
+ expect(result[0].role).toBe(space_1.SpaceMemberRole.EDITOR);
329
+ });
330
+ });
331
+ describe('inheritedFrom metadata', () => {
332
+ it('reports organization when org role is highest', () => {
333
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
334
+ organizationAccess: [
335
+ {
336
+ userUuid: 'user-1',
337
+ spaceUuid: 'space-1',
338
+ role: organizationMemberProfile_1.OrganizationMemberRole.EDITOR,
339
+ },
340
+ ],
341
+ }));
342
+ expect(result[0].inheritedFrom).toBe('organization');
343
+ });
344
+ it('reports project when project role is highest', () => {
345
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
346
+ organizationAccess: [
347
+ {
348
+ userUuid: 'user-1',
349
+ spaceUuid: 'space-1',
350
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
351
+ },
352
+ ],
353
+ projectAccess: [
354
+ {
355
+ userUuid: 'user-1',
356
+ spaceUuid: 'space-1',
357
+ role: projectMemberRole_1.ProjectMemberRole.EDITOR,
358
+ from: space_1.ProjectSpaceAccessOrigin.PROJECT_MEMBERSHIP,
359
+ },
360
+ ],
361
+ }));
362
+ expect(result[0].inheritedFrom).toBe('project');
363
+ });
364
+ it('reports group when group project role is highest', () => {
365
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
366
+ organizationAccess: [
367
+ {
368
+ userUuid: 'user-1',
369
+ spaceUuid: 'space-1',
370
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
371
+ },
372
+ ],
373
+ projectAccess: [
374
+ {
375
+ userUuid: 'user-1',
376
+ spaceUuid: 'space-1',
377
+ role: projectMemberRole_1.ProjectMemberRole.DEVELOPER,
378
+ from: space_1.ProjectSpaceAccessOrigin.GROUP_MEMBERSHIP,
379
+ },
380
+ ],
381
+ }));
382
+ expect(result[0].inheritedFrom).toBe('group');
383
+ });
384
+ it('reports space_group when space group access role is highest', () => {
385
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
386
+ organizationAccess: [
387
+ {
388
+ userUuid: 'user-1',
389
+ spaceUuid: 'space-1',
390
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
391
+ },
392
+ ],
393
+ directAccess: [
394
+ {
395
+ userUuid: 'user-1',
396
+ spaceUuid: 'space-1',
397
+ role: space_1.SpaceMemberRole.EDITOR,
398
+ from: space_1.DirectSpaceAccessOrigin.GROUP_ACCESS,
399
+ },
400
+ ],
401
+ }));
402
+ expect(result[0].inheritedFrom).toBe('space_group');
403
+ });
404
+ });
405
+ describe('projectRole field', () => {
406
+ it('only considers org + direct project membership (not groups)', () => {
407
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
408
+ organizationAccess: [
409
+ {
410
+ userUuid: 'user-1',
411
+ spaceUuid: 'space-1',
412
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
413
+ },
414
+ ],
415
+ projectAccess: [
416
+ {
417
+ userUuid: 'user-1',
418
+ spaceUuid: 'space-1',
419
+ role: projectMemberRole_1.ProjectMemberRole.DEVELOPER,
420
+ from: space_1.ProjectSpaceAccessOrigin.GROUP_MEMBERSHIP,
421
+ },
422
+ ],
423
+ }));
424
+ // projectRole should be VIEWER (from org), not DEVELOPER (from group)
425
+ expect(result[0].projectRole).toBe(projectMemberRole_1.ProjectMemberRole.VIEWER);
426
+ });
427
+ it('includes direct project membership in projectRole', () => {
428
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
429
+ organizationAccess: [
430
+ {
431
+ userUuid: 'user-1',
432
+ spaceUuid: 'space-1',
433
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
434
+ },
435
+ ],
436
+ projectAccess: [
437
+ {
438
+ userUuid: 'user-1',
439
+ spaceUuid: 'space-1',
440
+ role: projectMemberRole_1.ProjectMemberRole.EDITOR,
441
+ from: space_1.ProjectSpaceAccessOrigin.PROJECT_MEMBERSHIP,
442
+ },
443
+ ],
444
+ }));
445
+ expect(result[0].projectRole).toBe(projectMemberRole_1.ProjectMemberRole.EDITOR);
446
+ });
447
+ });
448
+ describe('multiple users', () => {
449
+ it('resolves access for multiple users independently', () => {
450
+ const orgAccess = [
451
+ {
452
+ userUuid: 'user-1',
453
+ spaceUuid: 'space-1',
454
+ role: organizationMemberProfile_1.OrganizationMemberRole.EDITOR,
455
+ },
456
+ {
457
+ userUuid: 'user-2',
458
+ spaceUuid: 'space-1',
459
+ role: organizationMemberProfile_1.OrganizationMemberRole.VIEWER,
460
+ },
461
+ ];
462
+ const directAccess = [
463
+ {
464
+ userUuid: 'user-2',
465
+ spaceUuid: 'space-1',
466
+ role: space_1.SpaceMemberRole.ADMIN,
467
+ from: space_1.DirectSpaceAccessOrigin.USER_ACCESS,
468
+ },
469
+ ];
470
+ const projectAccess = [];
471
+ const result = (0, spaceAccessResolver_1.resolveSpaceAccess)(makeInput({
472
+ organizationAccess: orgAccess,
473
+ directAccess,
474
+ projectAccess,
475
+ }));
476
+ expect(result).toHaveLength(2);
477
+ const user1 = result.find((r) => r.userUuid === 'user-1');
478
+ const user2 = result.find((r) => r.userUuid === 'user-2');
479
+ expect(user1?.role).toBe(space_1.SpaceMemberRole.EDITOR);
480
+ expect(user1?.hasDirectAccess).toBe(false);
481
+ expect(user2?.role).toBe(space_1.SpaceMemberRole.ADMIN);
482
+ expect(user2?.hasDirectAccess).toBe(true);
483
+ });
484
+ });
485
+ });
486
+ //# sourceMappingURL=spaceAccessResolver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaceAccessResolver.test.js","sourceRoot":"","sources":["../../../../src/authorization/space/spaceAccessResolver.test.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export * from './authorization/parseAccount';
17
17
  export * from './authorization/roleToScopeMapping';
18
18
  export * from './authorization/scopes';
19
19
  export * from './authorization/serviceAccountAbility';
20
+ export * from './authorization/space/spaceAccessResolver';
20
21
  export * from './authorization/types';
21
22
  export * from './compiler/compilationReport';
22
23
  export * from './compiler/exploreCompiler';