def get_access_by_project(self, item_list, user): request = env.request project_teams = list( ProjectTeam.objects.filter(project__in=item_list).select_related("team") ) project_team_map = defaultdict(list) for pt in project_teams: project_team_map[pt.project_id].append(pt.team) team_memberships = get_team_memberships([pt.team for pt in project_teams], user) org_roles = get_org_roles([i.organization_id for i in item_list], user) is_superuser = request and is_active_superuser(request) and request.user == user result = {} for project in item_list: is_member = any(t.id in team_memberships for t in project_team_map.get(project.id, [])) org_role = org_roles.get(project.organization_id) if is_member: has_access = True elif is_superuser: has_access = True elif project.organization.flags.allow_joinleave: has_access = True elif org_role and roles.get(org_role).is_global: has_access = True else: has_access = False result[project] = {"is_member": is_member, "has_access": has_access} return result
def get_access_by_project( projects: Sequence[Project], user: User ) -> MutableMapping[Project, MutableMapping[str, Any]]: request = env.request project_teams = list(ProjectTeam.objects.filter(project__in=projects).select_related("team")) project_team_map = defaultdict(list) for pt in project_teams: project_team_map[pt.project_id].append(pt.team) team_memberships = get_team_memberships([pt.team for pt in project_teams], user) org_roles = get_org_roles({i.organization_id for i in projects}, user) prefetch_related_objects(projects, "organization") is_superuser = request and is_active_superuser(request) and request.user == user result = {} for project in projects: is_member = any(t.id in team_memberships for t in project_team_map.get(project.id, [])) org_role = org_roles.get(project.organization_id) if is_member: has_access = True elif is_superuser: has_access = True elif project.organization.flags.allow_joinleave: has_access = True elif org_role and roles.get(org_role).is_global: has_access = True else: has_access = False result[project] = {"is_member": is_member, "has_access": has_access} return result
def get_access_by_project(self, item_list, user): request = env.request project_teams = list( ProjectTeam.objects.filter( project__in=item_list, ).select_related('team') ) project_team_map = defaultdict(list) for pt in project_teams: project_team_map[pt.project_id].append(pt.team) team_memberships = get_team_memberships([pt.team for pt in project_teams], user) org_roles = get_org_roles([i.organization_id for i in item_list], user) is_superuser = (request and is_active_superuser(request) and request.user == user) result = {} for project in item_list: is_member = any( t.id in team_memberships for t in project_team_map.get(project.id, []) ) org_role = org_roles.get(project.organization_id) if is_member: has_access = True elif is_superuser: has_access = True elif project.organization.flags.allow_joinleave: has_access = True elif org_role and roles.get(org_role).is_global: has_access = True else: has_access = False result[project] = { 'is_member': is_member, 'has_access': has_access, } return result