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 <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-02-11 20:59:08 +08:00
parent 35b568d647
commit b9184bbe3e

View File

@@ -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)