diff --git a/simpleui/templates/admin/actions.html b/simpleui/templates/admin/actions.html index 73574816..b8586a1a 100644 --- a/simpleui/templates/admin/actions.html +++ b/simpleui/templates/admin/actions.html @@ -192,7 +192,8 @@ - + @@ -210,7 +211,8 @@ params: [], layer: {}, rules: [], - action: '' + action: '', + dialogConfirmDisabled: false }, methods: { layerSubmit() { @@ -245,11 +247,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') { @@ -261,6 +264,7 @@ message: res.data.msg, type: res.data.status }); + this.dialogConfirmDisabled = false; }).catch(err => self.$message.error(err)); } } 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: