summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py51
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()