@@ -212,15 +212,22 @@ export type UserMetadata = {
212212 properties ?: { [ key : string ] : unknown }
213213}
214214
215+ export enum OrgRoleStructure {
216+ SingleRole = "single_role_in_hierarchy" ,
217+ MultiRole = "multi_role" ,
218+ }
219+
215220export class OrgMemberInfo {
216221 public readonly orgId : string
217222 public readonly orgName : string
218223 public readonly orgMetadata : { [ key : string ] : unknown }
219224 public readonly urlSafeOrgName : string
225+ public readonly orgRoleStructure : OrgRoleStructure
220226
221227 private readonly userAssignedRole : string
222228 private readonly userInheritedRolesPlusCurrentRole : string [ ]
223229 private readonly userPermissions : string [ ]
230+ private readonly userAssignedAdditionalRoles : string [ ]
224231
225232 constructor (
226233 orgId : string ,
@@ -229,7 +236,9 @@ export class OrgMemberInfo {
229236 urlSafeOrgName : string ,
230237 userAssignedRole : string ,
231238 userInheritedRolesPlusCurrentRole : string [ ] ,
232- userPermissions : string [ ]
239+ userPermissions : string [ ] ,
240+ orgRoleStructure ?: OrgRoleStructure ,
241+ userAssignedAdditionalRoles ?: string [ ]
233242 ) {
234243 this . orgId = orgId
235244 this . orgName = orgName
@@ -239,6 +248,8 @@ export class OrgMemberInfo {
239248 this . userAssignedRole = userAssignedRole
240249 this . userInheritedRolesPlusCurrentRole = userInheritedRolesPlusCurrentRole
241250 this . userPermissions = userPermissions
251+ this . orgRoleStructure = orgRoleStructure ?? OrgRoleStructure . SingleRole
252+ this . userAssignedAdditionalRoles = userAssignedAdditionalRoles ?? [ ]
242253 }
243254
244255 // getters
@@ -251,16 +262,28 @@ export class OrgMemberInfo {
251262 }
252263
253264 get inheritedRolesPlusCurrentRole ( ) : string [ ] {
254- return this . userInheritedRolesPlusCurrentRole
265+ if ( this . orgRoleStructure === OrgRoleStructure . MultiRole ) {
266+ return this . userAssignedAdditionalRoles . concat ( this . userAssignedRole )
267+ } else {
268+ return this . userInheritedRolesPlusCurrentRole
269+ }
255270 }
256271
257272 // validation methods
258273 public isRole ( role : string ) : boolean {
259- return this . userAssignedRole === role
274+ if ( this . orgRoleStructure === OrgRoleStructure . MultiRole ) {
275+ return this . userAssignedRole === role || this . userAssignedAdditionalRoles . includes ( role )
276+ } else {
277+ return this . userAssignedRole === role
278+ }
260279 }
261280
262281 public isAtLeastRole ( role : string ) : boolean {
263- return this . userInheritedRolesPlusCurrentRole . includes ( role )
282+ if ( this . orgRoleStructure === OrgRoleStructure . MultiRole ) {
283+ return this . userAssignedRole === role || this . userAssignedAdditionalRoles . includes ( role )
284+ } else {
285+ return this . userInheritedRolesPlusCurrentRole . includes ( role )
286+ }
264287 }
265288
266289 public hasPermission ( permission : string ) : boolean {
@@ -281,7 +304,9 @@ export class OrgMemberInfo {
281304 obj . urlSafeOrgName ,
282305 obj . userAssignedRole ,
283306 obj . userInheritedRolesPlusCurrentRole ,
284- obj . userPermissions
307+ obj . userPermissions ,
308+ obj . orgRoleStructure ,
309+ obj . userAssignedAdditionalRoles
285310 )
286311 } catch ( e ) {
287312 console . error (
@@ -309,9 +334,11 @@ export type InternalOrgMemberInfo = {
309334 org_name : string
310335 org_metadata : { [ key : string ] : any }
311336 url_safe_org_name : string
337+ org_role_structure : OrgRoleStructure
312338 user_role : string
313339 inherited_user_roles_plus_current_role : string [ ]
314340 user_permissions : string [ ]
341+ additional_roles : string [ ]
315342}
316343
317344// This type is used to represent the user returned from the refresh token.
@@ -382,7 +409,9 @@ export function toOrgIdToOrgMemberInfo(snake_case?: {
382409 snakeCaseValue . url_safe_org_name ,
383410 snakeCaseValue . user_role ,
384411 snakeCaseValue . inherited_user_roles_plus_current_role ,
385- snakeCaseValue . user_permissions
412+ snakeCaseValue . user_permissions ,
413+ snakeCaseValue . org_role_structure ,
414+ snakeCaseValue . additional_roles
386415 )
387416 }
388417 }
0 commit comments