Skip to content

Commit 9c63f6b

Browse files
authored
Merge pull request #739 from topcoder-platform/pm-1139
fix(PM-1139): challenge task access issue for project manager
2 parents 671bc84 + 26c4ad2 commit 9c63f6b

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

app-constants.js

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const UserRoles = {
99
Manager: "Connect Manager",
1010
User: "Topcoder User",
1111
SelfServiceCustomer: "Self-Service Customer",
12+
ProjectManager: "Project Manager",
1213
};
1314

1415
const prizeSetTypes = {

src/common/helper.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const elasticsearch = require("elasticsearch");
2222

2323
const projectHelper = require("./project-helper");
2424
const m2mHelper = require("./m2m-helper");
25-
const { hasAdminRole } = require("./role-helper");
25+
const { hasAdminRole, hasProjectManagerRole } = require("./role-helper");
2626

2727
// Bus API Client
2828
let busApiClient;
@@ -960,7 +960,7 @@ async function _ensureAccessibleForTaskChallenge(currentUser, challenge) {
960960
}
961961
const canAccesChallenge = _.isUndefined(currentUser)
962962
? false
963-
: currentUser.isMachine || hasAdminRole(currentUser) || !_.isEmpty(memberResources);
963+
: currentUser.isMachine || hasAdminRole(currentUser) || hasProjectManagerRole(currentUser) || !_.isEmpty(memberResources);
964964
if (!canAccesChallenge) {
965965
throw new errors.ForbiddenError(`You don't have access to view this challenge`);
966966
}

src/common/role-helper.js

+16
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,22 @@ function hasAdminRole(authUser) {
1515
return false;
1616
}
1717

18+
/**
19+
* Check if the user has project manager role
20+
* @param {Object} authUser the user
21+
*/
22+
function hasProjectManagerRole(authUser) {
23+
if (authUser && authUser.roles) {
24+
for (const role of authUser.roles) {
25+
if (role.toLowerCase() === constants.UserRoles.ProjectManager.toLowerCase()) {
26+
return true;
27+
}
28+
}
29+
}
30+
return false;
31+
}
32+
1833
module.exports = {
1934
hasAdminRole,
35+
hasProjectManagerRole,
2036
};

src/services/ChallengeService.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const PhaseAdvancer = require("../phase-management/PhaseAdvancer");
3535
const { ChallengeDomain } = require("@topcoder-framework/domain-challenge");
3636
const { QueryDomain } = require("@topcoder-framework/domain-acl");
3737

38-
const { hasAdminRole } = require("../common/role-helper");
38+
const { hasAdminRole, hasProjectManagerRole } = require("../common/role-helper");
3939
const {
4040
enrichChallengeForResponse,
4141
sanitizeRepeatedFieldsInUpdateRequest,
@@ -152,6 +152,7 @@ async function searchChallenges(currentUser, criteria) {
152152
];
153153

154154
const _hasAdminRole = hasAdminRole(currentUser);
155+
const _hasProjectManagerRole = hasProjectManagerRole(currentUser);
155156

156157
const includedTrackIds = _.isArray(criteria.trackIds) ? criteria.trackIds : [];
157158
const includedTypeIds = _.isArray(criteria.typeIds) ? criteria.typeIds : [];
@@ -588,7 +589,7 @@ async function searchChallenges(currentUser, criteria) {
588589
// FIXME: Tech Debt
589590
let excludeTasks = true;
590591
// if you're an admin or m2m, security rules wont be applied
591-
if (currentUser && (_hasAdminRole || _.get(currentUser, "isMachine", false))) {
592+
if (currentUser && (_hasAdminRole || _hasProjectManagerRole || _.get(currentUser, "isMachine", false))) {
592593
excludeTasks = false;
593594
}
594595

0 commit comments

Comments
 (0)