diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-11-14 17:31:15 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-19 14:45:55 +0100 |
commit | a2de2eb42009de3b8bf56f2af2a6071a4a98fd8f (patch) | |
tree | 6fff18a18e727775fd9fa497577a2c22bb113cf8 /ishtar_common/views_item.py | |
parent | 87502f2d4c71663771ee98d5b32ad7179610c1d7 (diff) | |
download | Ishtar-a2de2eb42009de3b8bf56f2af2a6071a4a98fd8f.tar.bz2 Ishtar-a2de2eb42009de3b8bf56f2af2a6071a4a98fd8f.zip |
✨ filter sheets by profile type
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r-- | ishtar_common/views_item.py | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 9f72171b9..9570687bf 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -376,6 +376,39 @@ def show_source_item(request, source_id, model, name, base_dct, extra_dct): return HttpResponse(content, content_type="application/xhtml") +def filter_sheet(ishtar_user, item): + if not ishtar_user or ishtar_user.is_ishtaradmin: + return item + profile = ishtar_user.current_profile + if not profile: + return item + exclude, keys = profile.profile_type.get_filters(item.__class__) + if exclude is None: + return item + base_keys = [ + "id", "pk", "locked", "is_locked", "SLUG", "APP", "MODEL", + "HAS_QR_CODE", "get_absolute_url", "get_extra_actions", + "get_extra_templates", "can_edit", "can_delete", "DELETE_URL" + ] + base_keys += getattr(item, "SHEET_BASE_KEYS", []) + if exclude: + # cannot exclude base keys + len_keys = len(keys) + for idx, key in enumerate(reversed(keys)): + if key in base_keys: + keys.pop(len_keys - 1 - idx) + else: + keys += base_keys + if exclude: + for key in keys: + setattr(item, key, None) + return item + new_item = type("BaseObject", (object,), {}) + for key in keys: + setattr(new_item, key, getattr(item, key, None)) + return new_item + + def show_item(model, name, extra_dct=None, model_for_perms=None, callback=None): def func(request, pk, **dct): check_model = model @@ -489,7 +522,9 @@ def show_item(model, name, extra_dct=None, model_for_perms=None, callback=None): and (not item.qrcode or not item.qrcode.name) ): item.generate_qrcode(request=request) - dct["item"], dct["item_name"] = item, name + + ishtaruser = hasattr(request.user, "ishtaruser") and request.user.ishtaruser + dct["item"], dct["item_name"] = filter_sheet(ishtaruser, item), name # add context if extra_dct: dct.update(extra_dct(request, item)) |