in frontend/src/utils/projectPermissions.js [42:81]
export function userCanValidate(user, project, userTeams = [], userOrgs = []) {
if (user.role === 'READ_ONLY') return false;
if (user.role === 'ADMIN') return true;
// project author can validate it
if (user.username && user.username === project.author) return true;
if (project.organisation && userOrgs.includes(project.organisation)) return true;
const projectTeamsIds = project.teams
.filter((team) => ['VALIDATOR', 'PROJECT_MANAGER'].includes(team.role))
.map((team) => team.teamId);
const isUserMemberOfATeam =
userTeams.filter((team) => projectTeamsIds.includes(team.teamId)).length > 0;
const isUserExperienced = ['INTERMEDIATE', 'ADVANCED'].includes(user.mappingLevel);
// check for private projects
if (project.private) {
if (project.allowedUsernames.includes(user.username) || isUserMemberOfATeam) {
return true;
} else {
return false;
}
}
// if validationPermission is ANY, all users can validate
if (project.validationPermission === 'ANY') return true;
// if validationPermission is level, only INTERMEDIATE and ADVANCED users can validate
if (project.validationPermission === 'LEVEL') {
return isUserExperienced;
}
// if validationPermission is team, only members of a project team can validate
if (project.validationPermission === 'TEAMS') {
return isUserMemberOfATeam;
}
// if validationPermission is team, only INTERMEDIATE and ADVANCED members of a project team can validate
if (project.validationPermission === 'TEAMS_LEVEL') {
return isUserMemberOfATeam && isUserExperienced;
}
}