@@ -315,52 +315,47 @@ export const useOrgStore = defineStore('org', () => {
315315 return response
316316 }
317317
318- async function syncMembership ( orgId : number ) : Promise < Member > {
319- let permissions :string [ ] = [ ]
320- let response
321- let membership :Member = null
322- const kcUserProfile = KeyCloakService . getUserInfo ( )
323- if ( ! kcUserProfile . roles . includes ( Role . Staff ) && ! kcUserProfile . roles . includes ( Role . ContactCentreStaff ) ) {
324- response = await UserService . getMembership ( orgId )
325- membership = response ?. data
326- // const org: Organization = state.currentOrganization']
327- const currentAccountSettings = state . currentAccountSettings
328- // const statusCode = org && org.statusCode ? org?.statusCode : currentAccountSettings.accountStatus
329- const statusCode = currentAccountSettings . accountStatus
330- // to fix permission issue. take status from currentAccountSettings
331- const res = await PermissionService . getPermissions ( statusCode , membership ?. membershipTypeCode )
332- permissions = res ?. data
333- } else {
334- // Check for better approach
335- // Create permissions to enable actions for staff
336- if ( kcUserProfile . roles . includes ( Role . ContactCentreStaff ) ) {
337- permissions = CommonUtils . getContactCentreStaffPermissions ( )
338- } else if ( kcUserProfile . roles . includes ( Role . StaffManageAccounts ) ) {
339- permissions = CommonUtils . getAdminPermissions ( )
340- } else if ( kcUserProfile . roles . includes ( Role . StaffViewAccounts ) ) {
341- permissions = CommonUtils . getViewOnlyPermissions ( )
342- }
343- // Create an empty membership model for staff. Map view_account as User and manage_accounts as Admin
344- let membershipTypeCode = null
345- if ( kcUserProfile . roles . includes ( Role . ContactCentreStaff ) ) {
346- membershipTypeCode = MembershipType . Admin
347- } else if ( kcUserProfile . roles . includes ( Role . StaffManageAccounts ) ) {
348- membershipTypeCode = MembershipType . Admin
349- } else if ( kcUserProfile . roles . includes ( Role . StaffViewAccounts ) ) {
350- membershipTypeCode = MembershipType . User
351- }
318+ const rolesMapping = {
319+ [ Role . ContactCentreStaff ] : {
320+ permissions : CommonUtils . getContactCentreStaffPermissions ( ) ,
321+ membershipType : MembershipType . Admin
322+ } ,
323+ [ Role . StaffManageAccounts ] : {
324+ permissions : CommonUtils . getAdminPermissions ( ) ,
325+ membershipType : MembershipType . Admin
326+ } ,
327+ [ Role . StaffViewAccounts ] : {
328+ permissions : CommonUtils . getViewOnlyPermissions ( ) ,
329+ membershipType : MembershipType . User
330+ }
331+ }
332+
333+ async function syncMembership ( orgId : number ) : Promise < Member > {
334+ const { roles } = KeyCloakService . getUserInfo ( )
335+
336+ // If user has any of the roles in the mapping, assign the permissions and membership type
337+ const assignedRole = roles . find ( role => Object . prototype . hasOwnProperty . call ( rolesMapping , role ) )
352338
353- membership = {
354- membershipTypeCode : membershipTypeCode ,
339+ if ( assignedRole ) {
340+ state . permissions = rolesMapping [ assignedRole ] . permissions
341+ state . currentMembership = {
342+ membershipTypeCode : rolesMapping [ assignedRole ] . membershipType ,
355343 id : null ,
356344 membershipStatus : MembershipStatus . Active ,
357345 user : null
358346 }
347+ return state . currentMembership
359348 }
360- permissions = permissions || [ ]
349+
350+ // If user doesn't have any of the roles in the mapping, get the membership from the API
351+ const { data : membership } = await UserService . getMembership ( orgId )
352+ const { accountStatus : statusCode } = state . currentAccountSettings
353+ const { data : permissions } = await PermissionService . getPermissions ( statusCode , membership ?. membershipTypeCode )
354+
355+ state . permissions = permissions || [ ]
361356 state . currentMembership = membership
362- state . permissions = permissions
363- return response ?. data
357+
358+ return membership
364359 }
365360
366361 /*
0 commit comments