summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-11-20 12:25:17 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-19 14:45:55 +0100
commit4cf3e9d2f70d600535d0856ebb077eff4072675b (patch)
tree82e85bfc9e6afc10f6483b5ec6859c37699726bc /ishtar_common/admin.py
parent15231b94373fd01de64b2b5eb1e5e2429267c1bc (diff)
downloadIshtar-4cf3e9d2f70d600535d0856ebb077eff4072675b.tar.bz2
Ishtar-4cf3e9d2f70d600535d0856ebb077eff4072675b.zip
✨ admin: warning message when multiple permission queries have been set for the same profile type
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py56
1 files changed, 42 insertions, 14 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 2e85486cf..c48aa40f2 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -1821,6 +1821,19 @@ class AreaAdmin(CreateDepartmentActionAdmin):
admin_site.register(models.Area, AreaAdmin)
+model_translations = {
+ "administrativeact": str(_("administrative act")),
+ "contextrecord": str(_("context record")),
+ "document": str(_("document")),
+ "file": str(_("archaeological file")),
+ "find": str(_("find")),
+ "operation": str(_("operation")),
+ "treatment": str(_("treatment")),
+ "treatmentfile": str(_("treament file")),
+ "warehouse": str(_("warehouse")),
+ "geovectordata": str(_("geographic data")),
+}
+
class ProfileTypeAdmin(GeneralTypeAdmin):
model = models.ProfileType
@@ -1832,12 +1845,39 @@ class ProfileTypeAdmin(GeneralTypeAdmin):
# clean "owns" VS "generics" groups
form.instance.clean_groups()
+ def check_queries(self, request, obj):
+ model_list = []
+ error = False
+ for permission_query in obj.permission_queries.all():
+ model = permission_query.model.model
+ if model in model_list:
+ error = model
+ break
+ model_list.append(model)
+ if not error:
+ return
+ if error in model_translations:
+ error = model_translations[error]
+ error = error.capitalize()
+ messages.add_message(
+ request,
+ messages.ERROR,
+ mark_safe(str(_(
+ "You can attach only one permission query by model.<br>"
+ "<strong>{}</strong> has many permission query attached.")).format(
+ error
+ )
+ )
+ )
+
+
def check_permission(self, request, object_id):
# check that all "own" permission has a request associated
try:
obj = models.ProfileType.objects.get(pk=int(object_id))
except models.ProfileType.DoesNotExist:
return Http404()
+ self.check_queries(request, obj)
permissions_needed = set()
permissions_not_needed = set()
for model in ("basefind", "import", "biographicalnote"):
@@ -1860,22 +1900,10 @@ class ProfileTypeAdmin(GeneralTypeAdmin):
if permission in permissions_not_needed:
permissions_needed.remove(permission)
if permissions_needed:
- translations = {
- "administrativeact": str(_("administrative act")),
- "contextrecord": str(_("context record")),
- "document": str(_("document")),
- "file": str(_("archaeological file")),
- "find": str(_("find")),
- "operation": str(_("operation")),
- "treatment": str(_("treatment")),
- "treatmentfile": str(_("treament file")),
- "warehouse": str(_("warehouse")),
- "geovectordata": str(_("geographic data")),
- }
perm_needed = []
for p in sorted(set([model for __, model in permissions_needed])):
- if p in translations:
- p = translations[p]
+ if p in model_translations:
+ p = model_translations[p]
perm_needed.append(p)
permission_needed = ", ".join(sorted(perm_needed))
messages.add_message(