From 8c4fe23fea557fbc89985009097409627fd9540d Mon Sep 17 00:00:00 2001 From: HMS17 Date: Fri, 19 Jul 2024 13:15:09 -0400 Subject: [PATCH 1/7] [BI-1692] - Change Domain of Roles --- src/config/ability.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/config/ability.ts b/src/config/ability.ts index e40dbf81a..f9077beaa 100644 --- a/src/config/ability.ts +++ b/src/config/ability.ts @@ -24,9 +24,9 @@ import {Program} from "@/breeding-insight/model/Program"; type DefinePermissions = (user: User, builder: AbilityBuilder) => void; const rolePermissions: Record = { - member(user, { can }) { + readonly(user, { can }) { }, - breeder(user, { can }) { + programadministrator(user, { can }) { can('create', 'ProgramUser'); can('update', 'ProgramUser'); can('archive', 'ProgramUser'); @@ -41,7 +41,7 @@ const rolePermissions: Record = { can('create', 'ProgramConfiguration'); can('update', 'ProgramConfiguration'); }, - admin(user, { can }) { + systemadministrator(user, { can }) { can('create', 'ProgramUser'); can('update', 'ProgramUser'); can('archive', 'ProgramUser'); @@ -55,10 +55,13 @@ export function defineAbilityFor(user: User | undefined, program: Program | unde const builder = new AbilityBuilder(); if (user) { + let roleNameConcat; // Check system roles if (user.roleName) { - if (typeof rolePermissions[user.roleName] === 'function') { - rolePermissions[user.roleName](user, builder); + roleNameConcat = user.roleName.replace(/\s/g, "").toLowerCase(); + console.log(roleNameConcat); + if (typeof rolePermissions[roleNameConcat] === 'function') { + rolePermissions[roleNameConcat](user, builder); } } @@ -66,12 +69,13 @@ export function defineAbilityFor(user: User | undefined, program: Program | unde // Check program roles if (user.programRoles) { for (const programRole of user.programRoles) { + roleNameConcat = programRole.domain.replace(/\s/g, "").toLowerCase(); //todo may need to wrap if (programRole.program && programRole.program.id && programRole.program.id === program.id && programRole.domain && programRole.active && - typeof rolePermissions[programRole.domain] === 'function') { + typeof rolePermissions[roleNameConcat] === 'function') { - rolePermissions[programRole.domain](user, builder); + rolePermissions[roleNameConcat](user, builder); } } } From e3fe19892df81d9f1a2e489d2f57023e14c08a73 Mon Sep 17 00:00:00 2001 From: HMS17 Date: Fri, 19 Jul 2024 17:34:29 -0400 Subject: [PATCH 2/7] [BI-1692] - Unit Test Fixes --- .../components/program/ProgramUsersTable.spec.ts | 12 ++++++------ .../components/tables/ExpandableTable.spec.ts | 16 ++++++++-------- tests/unit/index.ts | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/unit/components/program/ProgramUsersTable.spec.ts b/tests/unit/components/program/ProgramUsersTable.spec.ts index 077b39acc..569c14c1b 100644 --- a/tests/unit/components/program/ProgramUsersTable.spec.ts +++ b/tests/unit/components/program/ProgramUsersTable.spec.ts @@ -37,17 +37,17 @@ function setup() { roleDAO.getAll.mockResolvedValue(rolesResponse); const systemUser = {'id':'1', 'name':'Test user', 'email':'testuser@test.com', 'active':'true', - 'systemRoles': [{'id':'1', 'domain':'admin'}], - 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'member'}}]}; + 'systemRoles': [{'id':'1', 'domain':'System Administrator'}], + 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'Read Only'}}]}; const systemUser1 = { 'id':'2', 'name':'Test user 2', 'email':'testuser1@test.com', 'active':'true', 'orcid': '123', - 'systemRoles': [{'id':'1', 'domain':'admin'}], - 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'member'}}] + 'systemRoles': [{'id':'1', 'domain':'System Administrator'}], + 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'Read Only'}}] }; const systemUser2 = { 'id':'2', 'name':'Test user 2', 'email':'testuse2@test.com', 'active':'true', 'orcid': '456', - 'systemRoles': [{'id':'1', 'domain':'admin'}], - 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'member'}}] + 'systemRoles': [{'id':'1', 'domain':'System Administrator'}], + 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'Read Only'}}] } systemUsers.push(systemUser, systemUser1, systemUser2); const systemUsersResponse = DaoUtils.formatBiResponse(systemUsers); diff --git a/tests/unit/components/tables/ExpandableTable.spec.ts b/tests/unit/components/tables/ExpandableTable.spec.ts index 14aacba23..dafc693fa 100644 --- a/tests/unit/components/tables/ExpandableTable.spec.ts +++ b/tests/unit/components/tables/ExpandableTable.spec.ts @@ -69,24 +69,24 @@ function setup() { roleDAO.getAll.mockResolvedValue(rolesResponse); const systemUser = {'id':'1', 'name':'Test user', 'email':'testuser@test.com', 'active':'true', - 'systemRoles': [{'id':'1', 'domain':'admin'}], - 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'member'}}]}; + 'systemRoles': [{'id':'1', 'domain':'System Administrator'}], + 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'Read Only'}}]}; const systemUser1 = { 'id':'2', 'name':'Test user 2', 'email':'testuser1@test.com', 'active':'true', 'orcid': '123', - 'systemRoles': [{'id':'1', 'domain':'admin'}], - 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'member'}}] + 'systemRoles': [{'id':'1', 'domain':'System Administrator'}], + 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'Read Only'}}] }; const systemUser2 = { 'id':'2', 'name':'Test user 2', 'email':'testuse2@test.com', 'active':'true', 'orcid': '456', - 'systemRoles': [{'id':'1', 'domain':'admin'}], - 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'member'}}] + 'systemRoles': [{'id':'1', 'domain':'System Administrator'}], + 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'Read Only'}}] } systemUsers.push(systemUser, systemUser1, systemUser2); users.forEach(user => { systemUsers.push({ 'id':user.id, 'name':user.name, 'email':user.email, 'active':'true', 'orcid': `456-${user.id}`, - 'systemRoles': [{'id':'1', 'domain':'admin'}], - 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'member'}}] + 'systemRoles': [{'id':'1', 'domain':'System Administrator'}], + 'programRoles': [{'active':'true', 'program':{'id':'1', 'name':'Test Program'}, 'roles':{'id':'1','domain':'Read Only'}}] }) }) const systemUsersResponse = DaoUtils.formatBiResponse(systemUsers); diff --git a/tests/unit/index.ts b/tests/unit/index.ts index 78500e2e3..db6d309be 100644 --- a/tests/unit/index.ts +++ b/tests/unit/index.ts @@ -77,8 +77,8 @@ export const defaultStore = new Vuex.Store({ }); const fakeUser: User = new User('1', 'Test User','1', 'email@email.com', - new Role('1', 'admin'), - [new ProgramUser('1', 'Test User', 'email@email.com', '1', 'breeder', fakeProgram, true)]); + new Role('1', 'System Administrator'), + [new ProgramUser('1', 'Test User', 'email@email.com', '1', 'Program Administrator', fakeProgram, true)]); localVue.use(abilitiesPlugin, defineAbilityFor(fakeUser, fakeProgram)); export default localVue; From a55e28b2d65f69c6fb39eec1b1e89e08efb6d954 Mon Sep 17 00:00:00 2001 From: HMS17 Date: Tue, 23 Jul 2024 12:00:06 -0400 Subject: [PATCH 3/7] [BI-1692] - Missed Role Changes --- src/views/program/ProgramSelection.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/program/ProgramSelection.vue b/src/views/program/ProgramSelection.vue index 2a827f9de..fe7dc1dfa 100644 --- a/src/views/program/ProgramSelection.vue +++ b/src/views/program/ProgramSelection.vue @@ -23,7 +23,7 @@
-