From bdad0a5e26db0588761da9b922980a6fdfb89a4c Mon Sep 17 00:00:00 2001 From: donghao Date: Sun, 22 Oct 2023 16:25:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20dialogConfirmDisabled=20=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E9=87=8D=E5=A4=8D=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 36eb70662d780f157b4641cff1a184a4dd1cfcee) --- simpleui/templates/admin/actions.html | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/simpleui/templates/admin/actions.html b/simpleui/templates/admin/actions.html index 8c151d0e..1f7d55b7 100644 --- a/simpleui/templates/admin/actions.html +++ b/simpleui/templates/admin/actions.html @@ -188,7 +188,8 @@ - + @@ -206,7 +207,8 @@ params: [], layer: {}, rules: [], - action: '' + action: '', + dialogConfirmDisabled: false }, methods: { layerSubmit() { @@ -241,11 +243,12 @@ data.append(item.key, item.value); } } - + this.dialogConfirmDisabled = true; axios.post('{% get_model_ajax_url %}'+window.location.search, data).then(res => { if (res.data.status === 'redirect') { self.visible = false; window.location.href = res.data.url; + this.dialogConfirmDisabled = false; return; } if (res.data.status == 'success') { @@ -257,6 +260,7 @@ message: res.data.msg, type: res.data.status }); + this.dialogConfirmDisabled = false; }).catch(err => self.$message.error(err)); } } From 39770dc37f49e5d2bd9dc3eab79c3012afd455fc Mon Sep 17 00:00:00 2001 From: donghao Date: Sun, 22 Oct 2023 21:08:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=B7=BB=E5=8A=A0=E8=AE=BF=E9=97=AE=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simpleui/templatetags/simpletags.py | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/simpleui/templatetags/simpletags.py b/simpleui/templatetags/simpletags.py index 2f5681f9..4e91d92c 100644 --- a/simpleui/templatetags/simpletags.py +++ b/simpleui/templatetags/simpletags.py @@ -189,6 +189,36 @@ def format_table(d): return format_html(html) +def has_permission_in_config(config): + """ + Recursively check if any menu or sub-menu in the configuration is configured with permissions. + """ + if 'menus' in config: + for menu in config['menus']: + if has_permission_in_config(menu): + return True + if 'models' in config: + for model in config['models']: + if has_permission_in_config(model): + return True + if 'permission' in config: + return True + return + + +def get_filtered_menus(menus, user_permissions): + def filter_menu(menu, permissions): + if 'models' in menu: + menu['models'] = [sub_menu for sub_menu in menu['models'] if 'permission' not in sub_menu or + sub_menu['permission'] in permissions] + for sub_menu in menu['models']: + filter_menu(sub_menu, permissions) + menu_configs = [menu for menu in menus if 'permission' not in menu or menu['permission'] in user_permissions] + for menu in menu_configs: + filter_menu(menu, user_permissions) + return menu_configs + + @register.simple_tag(takes_context=True) def menus(context, _get_config=None): data = [] @@ -231,6 +261,9 @@ def menus(context, _get_config=None): } data.append(module) + if has_permission_in_config(config): + config["menus"] = get_filtered_menus(config["menus"], context.request.user.get_all_permissions()) + # 如果有menu 就读取,没有就调用系统的 key = 'system_keep' if config and 'menus' in config: