Skip to content

Commit 0ce0343

Browse files
Merge pull request #2298 from bcgov/fix/egc-316
Allow staff district login
2 parents 708c28c + d07ca7d commit 0ce0343

File tree

3 files changed

+53
-8
lines changed

3 files changed

+53
-8
lines changed

backend/src/components/cache-service.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ let sdcStaffDistrictPermissions = ['EDX_DISTRICT_VIEW', 'EDX_SCHOOL_VIEW', 'DIS_
1313
let sdcStaffSchoolPermissions = ['EDX_SCHOOL_VIEW', 'SCH_SDC_EDIT', 'SCH_SDC_VIEW'];
1414
let gradStaffAdminSchoolPermissions = ['EDX_SCHOOL_VIEW', 'GRAD_SCH_TVR_VIEW', 'GRAD_SCH_RPT_VIEW', 'GRAD_SCH_UPLOAD', 'GRAD_ERR_RPT_VIEW'];
1515
let gradStaffViewSchoolPermissions = ['EDX_SCHOOL_VIEW', 'GRAD_SCH_TVR_VIEW', 'GRAD_SCH_RPT_VIEW', 'GRAD_ERR_RPT_VIEW'];
16+
let gradStaffAdminDistrictPermissions = ['EDX_DISTRICT_VIEW', 'EDX_SCHOOL_VIEW', 'GRAD_DIS_TVR_VIEW', 'GRAD_DIS_RPT_VIEW', 'GRAD_DIS_UPLOAD', 'GRAD_ERR_RPT_VIEW'];
17+
let gradStaffViewDistrictPermissions = ['EDX_DISTRICT_VIEW', 'EDX_SCHOOL_VIEW', 'GRAD_DIS_TVR_VIEW', 'GRAD_DIS_RPT_VIEW', 'GRAD_ERR_RPT_VIEW'];
1618
let schoolMap = new Map();
1719
let schools = [];
1820
let districts = [];
@@ -181,6 +183,12 @@ const cacheService = {
181183
getGradStaffSchoolViewerPermissions() {
182184
return gradStaffViewSchoolPermissions;
183185
},
186+
getGradStaffDistrictAdminPermissions() {
187+
return gradStaffAdminDistrictPermissions;
188+
},
189+
getGradStaffDistrictViewerPermissions() {
190+
return gradStaffViewDistrictPermissions;
191+
},
184192
getSDCStaffSchoolPermissions() {
185193
return sdcStaffSchoolPermissions;
186194
},

backend/src/components/secureExchange.js

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -983,13 +983,21 @@ async function setStaffInstituteTypeIdentifierAndRedirectToSchool(req, res, scho
983983
}
984984
}
985985

986-
async function setInstituteTypeIdentifierAndRedirectToDistrict(req, res, districtID, sdcDistrictCollectionID) {
986+
async function setInstituteTypeIdentifierAndRedirectToDistrict(req, res, districtID, sdcDistrictCollectionID, directToGrad, isGradAdmin) {
987987
log.info('Set InstituteTypeIdentifierAndRedirectToDistrict And Redirect called');
988988

989989
if(sdcDistrictCollectionID && districtID){
990990
log.info('Staff user logged in, redirecting to selected school');
991991
setSessionInstituteIdentifiers(req, districtID, 'DISTRICT');
992992
res.redirect(config.get('server:frontend') + '/open-district-collection-summary/' + districtID);
993+
}else if(directToGrad && districtID && isGradAdmin){
994+
log.info('Staff admin user logged in, redirecting to selected district');
995+
setGradStaffAdminSessionInstituteIdentifiers(req, districtID, 'DISTRICT');
996+
res.redirect(config.get('server:frontend') + '/graduation/' + districtID);
997+
}else if(directToGrad && districtID && !isGradAdmin){
998+
log.info('Staff viewer user logged in, redirecting to selected district');
999+
setGradStaffViewerSessionInstituteIdentifiers(req, districtID, 'DISTRICT');
1000+
res.redirect(config.get('server:frontend') + '/graduation/' + districtID);
9931001
}else {
9941002
log.info('User has no associated schools or districts redirecting to Unauthorized Page');
9951003
res.redirect(config.get('server:frontend') + '/unauthorized');
@@ -1042,7 +1050,7 @@ function getAndSetupStaffUserAndRedirectWithSchoolCollectionLink(req, res, acces
10421050
}
10431051
}
10441052

1045-
function getAndSetupStaffUserAndRedirectWithDistrictCollectionLink(req, res, accessToken, districtID, sdcDistrictCollectionID) {
1053+
function getAndSetupStaffUserAndRedirectWithDistrictCollectionLink(req, res, accessToken, districtID, sdcDistrictCollectionID, directToGrad) {
10461054
let roles = req.session.passport.user._json.realm_access.roles;
10471055
if(roles.includes('EDX_ADMIN')){
10481056
Promise.all([
@@ -1063,9 +1071,24 @@ function getAndSetupStaffUserAndRedirectWithDistrictCollectionLink(req, res, acc
10631071
res.redirect(config.get('server:frontend') + '/unauthorizedNoEDXUser');
10641072
return;
10651073
}
1066-
await setInstituteTypeIdentifierAndRedirectToDistrict(req, res, districtID, sdcDistrictCollectionID);
1074+
await setInstituteTypeIdentifierAndRedirectToDistrict(req, res, districtID, sdcDistrictCollectionID, directToGrad, false);
10671075
});
1068-
}else{
1076+
} else if((roles.includes('GRAD_DATA_COLLECTION_ADMIN') || (roles.includes('GRAD_DATA_COLLECTION_VIEWER'))) && directToGrad){
1077+
Promise.all([
1078+
getData(accessToken, config.get('edx:edxUsersURL') + '/user-districts', req.session.correlationID)
1079+
])
1080+
.then(async ([userDistricts]) => {
1081+
req.session.userDistrictIDs = userDistricts?.filter((el) => {
1082+
return !!isDistrictActive(cacheService.getDistrictJSONByDistrictID(el));
1083+
});//this is list of active districtIDs associated to the user
1084+
1085+
if(roles.includes('GRAD_DATA_COLLECTION_ADMIN')){
1086+
await setInstituteTypeIdentifierAndRedirectToDistrict(req, res, districtID, sdcDistrictCollectionID, directToGrad, true);
1087+
}else{
1088+
await setInstituteTypeIdentifierAndRedirectToDistrict(req, res, districtID, sdcDistrictCollectionID, directToGrad, false);
1089+
}
1090+
});
1091+
} else{
10691092
log.info('IDIR user logged in without EDX_ADMIN role; redirecting to Unauthorized Page');
10701093
res.redirect(config.get('server:frontend') + '/unauthorized');
10711094
}
@@ -1133,7 +1156,11 @@ function setGradStaffAdminSessionInstituteIdentifiers(req, activeInstituteIdenti
11331156
let permissionsArray = [];
11341157

11351158
if(req.session.passport.user._json.idir_guid){
1136-
permissionsArray = cacheService.getGradStaffSchoolAdminPermissions();
1159+
if(activeInstituteType === 'SCHOOL') {
1160+
permissionsArray = cacheService.getGradStaffSchoolAdminPermissions();
1161+
} else {
1162+
permissionsArray = cacheService.getGradStaffDistrictAdminPermissions();
1163+
}
11371164
}
11381165

11391166
req.session.activeInstitutePermissions = permissionsArray;
@@ -1145,7 +1172,11 @@ function setGradStaffViewerSessionInstituteIdentifiers(req, activeInstituteIdent
11451172
let permissionsArray = [];
11461173

11471174
if(req.session.passport.user._json.idir_guid){
1148-
permissionsArray = cacheService.getGradStaffSchoolViewerPermissions();
1175+
if(activeInstituteType === 'SCHOOL') {
1176+
permissionsArray = cacheService.getGradStaffSchoolViewerPermissions();
1177+
} else {
1178+
permissionsArray = cacheService.getGradStaffDistrictViewerPermissions();
1179+
}
11491180
}
11501181

11511182
req.session.activeInstitutePermissions = permissionsArray;

backend/src/routes/auth.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ router.get('/silent_sdc_idir_login', async function (req, res, next) {
114114
await client.set(idir_guid + '::staffLinkInstituteID', req.query.schoolID, 'EX', 1800);
115115
await client.set(idir_guid + '::staffLinkGradDashboard', 'true', 'EX', 1800);
116116
await client.set(idir_guid + '::staffLinkInstituteType', 'SCHOOL', 'EX', 1800);
117+
}else if(req.query.districtID && req.query.gradDashboard){
118+
await client.set(idir_guid + '::staffLinkInstituteID', req.query.districtID, 'EX', 1800);
119+
await client.set(idir_guid + '::staffLinkGradDashboard', 'true', 'EX', 1800);
120+
await client.set(idir_guid + '::staffLinkInstituteType', 'DISTRICT', 'EX', 1800);
117121
}else{
118122
res.status(401).json(UnauthorizedRsp);
119123
}
@@ -149,8 +153,10 @@ router.get(
149153
getAndSetupStaffUserAndRedirectWithSchoolCollectionLink(req, res, accessToken, instituteID.toString(), instituteCollectionID.toString(), false);
150154
}else if(instituteType === 'SCHOOL' && staffLinkDashboard){
151155
getAndSetupStaffUserAndRedirectWithSchoolCollectionLink(req, res, accessToken, instituteID.toString(), null, true);
152-
}else if(instituteID && instituteCollectionID){
153-
getAndSetupStaffUserAndRedirectWithDistrictCollectionLink(req, res, accessToken, instituteID.toString(), instituteCollectionID.toString());
156+
}else if(instituteType === 'DISTRICT' && instituteCollectionID){
157+
getAndSetupStaffUserAndRedirectWithDistrictCollectionLink(req, res, accessToken, instituteID.toString(), instituteCollectionID.toString(), false);
158+
}else if(instituteType === 'DISTRICT' && staffLinkDashboard){
159+
getAndSetupStaffUserAndRedirectWithDistrictCollectionLink(req, res, accessToken, instituteID.toString(), null, true);
154160
}else{
155161
await res.redirect(config.get('server:frontend') + '/unauthorized');
156162
}

0 commit comments

Comments
 (0)