diff --git a/jituan/services/kefu_menu.py b/jituan/services/kefu_menu.py index 5864981..481454b 100644 --- a/jituan/services/kefu_menu.py +++ b/jituan/services/kefu_menu.py @@ -30,10 +30,14 @@ def _has_super_perm(permissions): def _page_visible(page, permissions, user): + page_id = getattr(page, 'page_id', '') or '' + if page.require_group_manage: return can_manage_admin_assignments(user) - if getattr(page, 'require_admin_user_manage', False): + # 后台用户:本店超级管理 000001 / 集团 / 系统超管均可。 + # 注意:历史上 DB 模型缺 require_admin_user_manage 字段,导致该页永远不可见,必须按 page_id 兜底。 + if page_id == 'admin.user' or getattr(page, 'require_admin_user_manage', False): return can_access_admin_user_management(user, permissions) if page.require_super: @@ -165,6 +169,7 @@ def build_menu_access_payload(request, username=None): path_by_id = {p.page_id: p.path for p in pages if p.path} visible_paths = [path_by_id[pid] for pid in visible_ids if pid in path_by_id] + is_super = _has_super_perm(permissions) or is_system_super_admin(request.user) return { 'visible_page_ids': sorted(set(visible_ids)), 'visible_paths': visible_paths, @@ -178,6 +183,7 @@ def build_menu_access_payload(request, username=None): 'roles_in_scope': roles_detail, 'can_switch_club': bool(club_ctx.get('can_switch_club')), 'is_group_admin': bool(club_ctx.get('is_group_admin')), + 'is_super': bool(is_super), 'menu_ready': True, 'menu_source': menu_source, }, None diff --git a/jituan/services/kefu_menu_definitions.py b/jituan/services/kefu_menu_definitions.py index f9d4e5e..c399659 100644 --- a/jituan/services/kefu_menu_definitions.py +++ b/jituan/services/kefu_menu_definitions.py @@ -54,8 +54,9 @@ KEFU_MENU_ROW_DEFS = [ 'require_group_manage': True}, {'page_id': 'admin.club-config', 'name': '俱乐部密钥配置', 'path': '/admin/club-config', 'parent_id': 'admin', 'sort_order': 73, 'require_group_manage': True}, + # require_super 兜底(旧 DB 无 require_admin_user_manage 列时仍可显示);运行时仍按 page_id=admin.user 走用户管理闸门 {'page_id': 'admin.user', 'name': '后台用户', 'path': '/admin/user', 'parent_id': 'admin', 'sort_order': 74, - 'require_admin_user_manage': True}, + 'require_super': True, 'require_admin_user_manage': True}, {'page_id': 'admin.operation-log', 'name': '操作日志', 'path': '/admin/operation-log', 'parent_id': 'admin', 'sort_order': 75, 'perm_codes': ['czrz666']}, {'page_id': 'punishment', 'name': '处罚管理', 'path': '/punishment', 'parent_id': '', 'sort_order': 80,