diff options
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 |
commit | 4cf3e9d2f70d600535d0856ebb077eff4072675b (patch) | |
tree | 82e85bfc9e6afc10f6483b5ec6859c37699726bc | |
parent | 15231b94373fd01de64b2b5eb1e5e2429267c1bc (diff) | |
download | Ishtar-4cf3e9d2f70d600535d0856ebb077eff4072675b.tar.bz2 Ishtar-4cf3e9d2f70d600535d0856ebb077eff4072675b.zip |
✨ admin: warning message when multiple permission queries have been set for the same profile type
-rw-r--r-- | ishtar_common/admin.py | 56 |
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( |