diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 5b2e3fdbf..424648854 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3609,7 +3609,8 @@ class UserProfile(models.Model): print("ishtar_common/models.py - 3600", item_ids, ishtar_user, content_type, permission_type) return item_ids - def generate_permission(self, content_type, permission_type): + def generate_permission(self, content_type, permission_type, + base_permission_only=False): ishtar_user = self.person.ishtaruser if self.expiration_date and self.expiration_date < datetime.date.today(): @@ -3618,8 +3619,12 @@ class UserProfile(models.Model): # add base permissions for group in self.profile_type.groups.all(): for perm in group.permissions.filter( + content_type=content_type, codename__startswith=permission_type).all(): ishtar_user.user_ptr.user_permissions.add(perm) + if base_permission_only: + return + q_has_perm = self.profile_type.groups.filter( permissions__content_type=content_type, permissions__codename__startswith=f"{permission_type}_own_", @@ -3772,6 +3777,7 @@ class IshtarUser(FullSearch): SearchVectorConfig("person__town"), SearchVectorConfig("person__attached_to__name"), ] + SHEET_ALTERNATIVES = [] CACHED_LABELS = [] # needed to force search vector update @@ -3926,12 +3932,15 @@ class IshtarUser(FullSearch): def generate_permission(self): # models to treat first in this order to manage cascade permissions model_names = [ + ("archaeological_files", "file"), ("archaeological_operations", "operation"), + ("archaeological_operations", "archaeologicalsite"), ("archaeological_context_records", "contextrecord"), ("archaeological_warehouse", "warehouse"), - ("archaeological_finds", "treatment"), ("archaeological_warehouse", "container"), ("archaeological_finds", "find"), + ("archaeological_finds", "treatmentfile"), + ("archaeological_finds", "treatment"), ] # cascade permission to treat at the end last_model_names = [ @@ -3958,9 +3967,47 @@ class IshtarUser(FullSearch): for ct in content_types: for profile in self.person.profiles.all(): + profile.generate_permission(ct, "add", base_permission_only=True) for permission_type in ("view", "change", "delete"): profile.generate_permission(ct, permission_type) + def has_permission_dict(self): + """ + Get permission dict with permission codename as key and True or False as result. + Used by ishtaruser sheet + """ + permission_list = [] + model_list = [ + ("archaeological_context_records", "contextrecord"), + ("archaeological_files", "file"), + ("archaeological_finds", "find"), + ("archaeological_finds", "treatment"), + ("archaeological_finds", "treatmentfile"), + ("archaeological_operations", "operation"), + ("archaeological_operations", "archaeologicalsite"), + ("archaeological_warehouse", "warehouse"), + ("archaeological_warehouse", "container"), + ("ishtar_common", "document"), + ("ishtar_common", "person"), + ("ishtar_common", "organization"), + ("archaeological_operations", "administrativeact"), + ] + for app_label, model in model_list: + for permission in ("change", "delete", "view"): + permission_list.append( + (app_label, model, f"{permission}_own_{model}") + ) + permission_dict = {} + for app_label, model, permission_codename in permission_list: + ct = ContentType.objects.get(app_label=app_label, model=model) + q = UserObjectPermission.objects.filter( + user_id=self.pk, + permission__codename=permission_codename, + content_type=ct + ) + permission_dict[permission_codename] = q.exists() + return permission_dict + def full_label(self): return self.person.full_label() |