diff options
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)) |