From b9184bbe3e1711cf1e6acdecdce5bfa96eeac9b8 Mon Sep 17 00:00:00 2001 From: Misaka Date: Wed, 11 Feb 2026 20:59:08 +0800 Subject: [PATCH] fix: handle material validation filter for non-admin users - Fix _get_selected_managers() to return current username for non-admin users - Fix _restore_manager_filter_state() to skip checkbox operations for non-admin users - Initialize filter_frame attribute for non-admin users to avoid AttributeError Co-Authored-By: Claude Sonnet 4.5 --- gui/material_validation_tab.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/gui/material_validation_tab.py b/gui/material_validation_tab.py index af3fe49..6d0652b 100644 --- a/gui/material_validation_tab.py +++ b/gui/material_validation_tab.py @@ -400,6 +400,9 @@ class MaterialValidationTab(ttk.Frame): """创建负责人筛选区域""" # PERMISSION CHECK: 非管理员用户不显示筛选区域 if not self.session_manager.is_admin(): + # 创建空的 filter_frame 以避免后续代码访问属性时报错 + self.filter_frame = ttk.Frame(parent) + self.filter_canvas = None return # 创建复选框容器 @@ -520,7 +523,15 @@ class MaterialValidationTab(ttk.Frame): self._apply_manager_filter() def _get_selected_managers(self) -> List[str]: - """获取选中的负责人列表""" + """获取选中的负责人列表 + + PERMISSION CHECK: 非管理员用户返回当前用户名 + """ + # PERMISSION CHECK: 非管理员用户直接返回当前用户名 + if not self.session_manager.is_admin(): + return [self.session_manager.get_username()] + + # 管理员:从复选框获取选中的负责人 return [ manager for manager, var in self.manager_checkboxes.items() if var.get() @@ -897,8 +908,17 @@ class MaterialValidationTab(ttk.Frame): self._update_log(f"初始化筛选器失败:{str(e)}", "ERROR") def _restore_manager_filter_state(self, selected_managers: List[str]): - """恢复负责人筛选状态""" + """恢复负责人筛选状态 + + PERMISSION CHECK: 非管理员用户直接应用筛选(不需要操作复选框) + """ try: + # PERMISSION CHECK: 非管理员用户直接应用筛选 + if not self.session_manager.is_admin(): + self._apply_manager_filter() + return + + # 管理员:恢复复选框状态 for manager in selected_managers: if manager in self.manager_checkboxes: self.manager_checkboxes[manager].set(True)