export function userCanMap()

in frontend/src/utils/projectPermissions.js [1:40]


export function userCanMap(user, project, userTeams = [], userOrgs = []) {
  if (user.role === 'READ_ONLY') return false;
  if (user.role === 'ADMIN') return true;
  // project author can map 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) => ['MAPPER', '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 mappingPermission is ANY, all users can map
  if (project.mappingPermission === 'ANY') return true;

  // if mappingPermission is level, only INTERMEDIATE and ADVANCED users can map
  if (project.mappingPermission === 'LEVEL') {
    return isUserExperienced;
  }

  // if mappingPermission is team, only members of a project team can map
  if (project.mappingPermission === 'TEAMS') {
    return isUserMemberOfATeam;
  }

  // if mappingPermission is team, only INTERMEDIATE and ADVANCED members of a project team can map
  if (project.mappingPermission === 'TEAMS_LEVEL') {
    return isUserMemberOfATeam && isUserExperienced;
  }
}