Beispiel #1
0
 def users_with_study_perms(self, study_perm: StudyPermission):
     users_with_perms = get_users_with_perms(
         self, only_with_perms_in=[study_perm.codename])
     if self.lab and study_perm in UMBRELLA_LAB_PERMISSION_MAP:
         umbrella_lab_perm = UMBRELLA_LAB_PERMISSION_MAP.get(study_perm)
         users_with_perms = users_with_perms.union(
             get_users_with_perms(
                 self.lab, only_with_perms_in=[umbrella_lab_perm.codename]))
     return users_with_perms
Beispiel #2
0
def studies_for_which_user_has_perm(user, study_perm: StudyPermission):

    study_level_perm_study_ids = get_objects_for_user(
        user, study_perm.prefixed_codename).values_list("id", flat=True)

    umbrella_lab_perm = UMBRELLA_LAB_PERMISSION_MAP.get(study_perm)
    labs_with_labwide_perms = get_objects_for_user(
        user, umbrella_lab_perm.prefixed_codename)

    return Study.objects.filter(
        Q(lab__in=labs_with_labwide_perms)
        | Q(id__in=study_level_perm_study_ids))
Beispiel #3
0
 def has_study_perms(self, study_perm: StudyPermission, study) -> bool:
     # 1) Modeled perm should be passed already
     has_all_studies_perm = self.has_perm(study_perm.prefixed_codename)
     if has_all_studies_perm:
         return True
     has_study_perm = self.has_perm(study_perm.codename, study)
     if has_study_perm:
         return True
     else:
         umbrella_lab_perm = UMBRELLA_LAB_PERMISSION_MAP.get(study_perm)
         lab = study.lab
         if lab:
             return self.has_perm(umbrella_lab_perm.codename, study.lab)
         else:
             return False