export function userCanValidate()

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;
  }
}