Skip to content

Commit 7fd491f

Browse files
committed
chore(shared,types): Org permissions claims is a string in v2
1 parent b347a45 commit 7fd491f

File tree

3 files changed

+34
-8
lines changed

3 files changed

+34
-8
lines changed

packages/shared/src/__tests__/authorization.test.ts

+29-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ describe('resolveSignedInAuthStateFromJWTClaims', () => {
2020
id: 'org_id',
2121
rol: 'admin',
2222
slg: 'org_slug',
23-
per: ['permission1', 'permission2'],
23+
per: 'permission1,permission2',
2424
},
2525
});
2626

@@ -31,7 +31,7 @@ describe('resolveSignedInAuthStateFromJWTClaims', () => {
3131
org_slug: 'org_slug',
3232
org_permissions: ['permission1', 'permission2'],
3333
});
34-
expect(signedInAuthObjectV1).toMatchObject(signedInAuthObjectV2);
34+
expect(signedInAuthObjectV1).toEqual(signedInAuthObjectV2);
3535
});
3636

3737
test('produced auth object with v2 matches v1 without having orgs related claims', () => {
@@ -43,6 +43,32 @@ describe('resolveSignedInAuthStateFromJWTClaims', () => {
4343
const { sessionClaims: v1Claims, ...signedInAuthObjectV1 } = resolveSignedInAuthStateFromJWTClaims({
4444
...baseClaims,
4545
});
46-
expect(signedInAuthObjectV1).toMatchObject(signedInAuthObjectV2);
46+
expect(signedInAuthObjectV1).toEqual(signedInAuthObjectV2);
47+
});
48+
49+
test('v2 org permissions are splitted correctly', () => {
50+
const authObject = resolveSignedInAuthStateFromJWTClaims({
51+
...baseClaims,
52+
v: 2,
53+
org: {
54+
id: 'org_id',
55+
rol: 'admin',
56+
slg: 'org_slug',
57+
per: 'permission1,permission2',
58+
},
59+
});
60+
expect(authObject.orgPermissions).toEqual(['permission1', 'permission2']);
61+
62+
const authObject2 = resolveSignedInAuthStateFromJWTClaims({
63+
...baseClaims,
64+
v: 2,
65+
org: {
66+
id: 'org_id',
67+
rol: 'admin',
68+
slg: 'org_slug',
69+
per: 'permission1',
70+
},
71+
});
72+
expect(authObject2.orgPermissions).toEqual(['permission1']);
4773
});
4874
});

packages/shared/src/authorization.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ const __experimental_resolveSignedInAuthStateFromJWTClaims = (claims: JwtPayload
303303
let orgId: string | undefined;
304304
let orgRole: OrganizationCustomRoleKey | undefined;
305305
let orgSlug: string | undefined;
306-
let orgPermissions: string[] | undefined;
306+
let orgPermissions: OrganizationCustomPermissionKey[] | undefined;
307307

308308
// fva can be undefined for instances that have not opt-in
309309
const factorVerificationAge = claims.fva ?? null;
@@ -312,13 +312,13 @@ const __experimental_resolveSignedInAuthStateFromJWTClaims = (claims: JwtPayload
312312
const sessionStatus = claims.sts ?? null;
313313

314314
switch (claims.v) {
315-
case 2:
315+
case 2: {
316316
orgId = claims.org?.id;
317317
orgRole = claims.org?.rol;
318318
orgSlug = claims.org?.slg;
319-
320-
orgPermissions = claims.org?.per;
319+
orgPermissions = claims.org?.per?.split(',').map((permission: string) => permission.trim()) || undefined;
321320
break;
321+
}
322322
default:
323323
orgId = claims.org_id;
324324
orgRole = claims.org_role;

packages/types/src/jwtv2.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ export type VersionedJwtPayload =
160160
*
161161
* Active organization permissions.
162162
*/
163-
per?: OrganizationCustomPermissionKey[];
163+
per?: string;
164164
};
165165
};
166166

0 commit comments

Comments
 (0)