diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-03 17:26:32 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-19 14:45:56 +0100 |
commit | 142d69997ab3175477494fa9d86aa339568dc7e9 (patch) | |
tree | f4412d7014b5e7fe4a21540929075a4174aeee35 | |
parent | 20fd9415b58aee61f30ee586930f9a06d5bbe4e9 (diff) | |
download | Ishtar-142d69997ab3175477494fa9d86aa339568dc7e9.tar.bz2 Ishtar-142d69997ab3175477494fa9d86aa339568dc7e9.zip |
✨ account sheet: explicit display of permissions
-rw-r--r-- | ishtar_common/models.py | 21 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/sheet_ishtaruser.html | 9 | ||||
-rw-r--r-- | ishtar_common/views_item.py | 23 |
3 files changed, 51 insertions, 2 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 5b4620254..949120383 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3057,6 +3057,27 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem): profile.save() return profile + @property + def groups_display(self): + groups = Group.objects.filter(profile_types__user_profiles__person=self) + groups = set(groups.values_list("name", flat=True)) + permissions = {} + for group in groups: + if ":" not in group: + permissions[group] = [] + continue + group_part = group.split(":") + item, permission = group_part[0].strip(), ":".join(group_part[1:]).strip() + item_parts = item.split(" ") + if item_parts[-1].startswith(str(_("attached"))): + item = " ".join(item_parts[:-1]) + permission = permission + " " + item_parts[-1] + if item not in permissions: + permissions[item] = [] + permissions[item].append(permission) + for item in sorted(permissions.keys()): + yield item, " ; ".join(sorted(permissions[item])) + def get_short_html_items(self): items = super(Person, self).get_short_html_items() if items or not self.attached_to: diff --git a/ishtar_common/templates/ishtar/sheet_ishtaruser.html b/ishtar_common/templates/ishtar/sheet_ishtaruser.html index 19c55ee0e..e30df5278 100644 --- a/ishtar_common/templates/ishtar/sheet_ishtaruser.html +++ b/ishtar_common/templates/ishtar/sheet_ishtaruser.html @@ -75,6 +75,15 @@ {% endfor %} </dd> </dl> + <dl class="col-12 flex-wrap"> + <dt>{% trans "Permission(s)" %}</dt> + <dd> + <ul> + {% for item, permissions in item.person.groups_display %} + <li><em>{{item}}</em>{{ PUNCTUATION.colon }} {{permissions}}</li>{% endfor %} + </ul> + </dd> + </dl> </div> {% if item.is_ishtaradmin %} <div class="alert alert-warning" role="alert"> diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 89caaef77..7407eb37f 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -41,11 +41,12 @@ from django.shortcuts import render from django.template import loader from django.urls import reverse, NoReverseMatch from django.utils.translation import ( - ugettext, - ugettext_lazy as _, activate, deactivate, + get_language, pgettext_lazy, + ugettext, + ugettext_lazy as _, ) from guardian.models import UserObjectPermission from tidylib import tidy_document as tidy @@ -458,6 +459,20 @@ def filter_sheet(ishtar_user, item): return new_item +PUNCTUATION = { + "fr": { + "colon": " :", + "exclamation": " !", + "question": " ?", + }, + "en": { + "colon": ":", + "exclamation": "!", + "question": "?", + }, +} + + def show_item(model, name, extra_dct=None, model_for_perms=None, callback=None): def func(request, pk, **dct): check_model = model @@ -497,6 +512,10 @@ def show_item(model, name, extra_dct=None, model_for_perms=None, callback=None): dct["ENCODING"] = settings.ENCODING dct["DOT_GENERATION"] = settings.DOT_BINARY and profile.relation_graph dct["SHOW_GEO"] = profile.mapping + current_language = get_language() + if current_language not in PUNCTUATION: + current_language = "en" + dct["PUNCTUATION"] = PUNCTUATION[current_language] dct["current_window_url"] = url_name date = None if "date" in dct: |