From 4a8400f7fca43792ee7b91e4006b046f22e453db Mon Sep 17 00:00:00 2001 From: Filipe Pina Date: Sun, 5 Feb 2023 14:39:33 +0000 Subject: [PATCH 1/2] remove SURFACE_MENU_ITEMS that user has no permission (UX) - WIP missing tests --- theme/utils.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/theme/utils.py b/theme/utils.py index a858073..f9a83d0 100644 --- a/theme/utils.py +++ b/theme/utils.py @@ -305,6 +305,8 @@ def get_menu_item_app_model(app_label, data): if 'icon' in data: item['icon'] = item.get('icon', 'fas fa-layer-group') + if not item['has_perms']: + return None return item def get_menu_item_app(data): @@ -320,24 +322,31 @@ def get_menu_item_app(data): else: item = {'app_label': app_label, 'has_perms': True} + if 'permissions' in data: + item['has_perms'] = item.get('has_perms', True) and context['user'].has_perms(data['permissions']) + if not item['has_perms']: + return None + item['label'] = data.get('label', '') item['url_blank'] = data.get('url_blank', '') item['icon'] = data.get('icon', 'fas fa-layer-group') if 'items' in data: - item['items'] = list(map(lambda x: get_menu_item_app_model(app_label, x), data['items'])) + item['items'] = [ + get_menu_item_app_model(app_label, x) + for x in data['items'] + if get_menu_item_app_model(app_label, x) is not None + ] if 'url' in data: item['url'] = get_menu_item_url(data['url'], original_app_list) - if 'permissions' in data: - item['has_perms'] = item.get('has_perms', True) and context['user'].has_perms(data['permissions']) - return item for data in custom_app_list: item = get_menu_item_app(data) - app_list.append(item) + if item is not None: + app_list.append(item) else: From e432096b85cf7a2b5939ec5839684d5d5a028d84 Mon Sep 17 00:00:00 2001 From: Filipe Pina Date: Sun, 5 Feb 2023 15:09:19 +0000 Subject: [PATCH 2/2] surface menu items: re-use model if no items specified (and there was an app_label match). same for label --- theme/utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/theme/utils.py b/theme/utils.py index f9a83d0..49e9349 100644 --- a/theme/utils.py +++ b/theme/utils.py @@ -327,7 +327,8 @@ def get_menu_item_app(data): if not item['has_perms']: return None - item['label'] = data.get('label', '') + # use label from settings if there is one, otherwise re-use the one from app (if match), otherwise empty. + item['label'] = data.get('label', item.get('label', '')) item['url_blank'] = data.get('url_blank', '') item['icon'] = data.get('icon', 'fas fa-layer-group') @@ -337,6 +338,9 @@ def get_menu_item_app(data): for x in data['items'] if get_menu_item_app_model(app_label, x) is not None ] + elif 'models' in item: + # fallback to all models if this menu item matches an app_label + item['items'] = item['models'] if 'url' in data: item['url'] = get_menu_item_url(data['url'], original_app_list)