summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
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
commita2de2eb42009de3b8bf56f2af2a6071a4a98fd8f (patch)
tree6fff18a18e727775fd9fa497577a2c22bb113cf8 /ishtar_common/views_item.py
parent87502f2d4c71663771ee98d5b32ad7179610c1d7 (diff)
downloadIshtar-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.py37
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))