Restrict settings interface and material validation features based on user type: - SettingsTab: User type only sees "Test ERP Connection" and "Test Database Connection" buttons; Admin sees full configuration interface - MaterialValidationTab: Hide manager filter and data source options from non-admin users; default to database_filtered mode - test_db_connection(): Read from config directly to support User type without UI variables - Add backward compatibility: no session_manager defaults to full interface Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3.1 KiB
3.1 KiB
用户类型限制设置界面功能
概述
实现了基于用户类型的设置界面访问控制。对于 User 类型的用户,设置界面仅显示"测试ERP连接"和"测试数据库连接"两个按钮,隐藏所有配置组。Admin 类型用户可以看到完整的设置界面。
修改的文件
1. gui/settings_tab.py
构造函数修改
- 添加了
session_manager可选参数 - 保存
session_manager实例用于用户类型判断
create_widgets() 方法修改
- 添加用户类型判断逻辑
- 对于
User类型用户,跳过创建所有配置组 - 根据用户类型显示不同的按钮组合
load_settings() 方法修改
- 添加用户类型判断
- 对于
User类型用户,跳过加载配置到界面(因为没有界面元素)
test_db_connection() 方法修改
- 从
self.config直接读取配置而不是从 UI 变量 - 这样即使没有 UI 变量,User 也能测试数据库连接
2. gui/main_window.py
create_widgets() 方法修改
- 传入
session_manager到SettingsTab构造函数
功能特性
User 类型用户
- 可见内容: 仅两个按钮
- 测试 ERP 连接
- 测试数据库连接
- 隐藏内容: 所有配置组
- ERP 系统配置
- 数据库配置
- 浏览器设置
- 路径设置
- 数据提取设置
- 物料校验设置
- 隐藏按钮:
- 保存设置
- 恢复默认
Admin 类型用户
- 显示完整的设置界面(所有配置组和所有按钮)
向后兼容
- 如果不传入
session_manager参数,默认显示完整界面 - 这确保了不破坏现有代码
测试
自动化测试
运行 tests/test_user_settings_restriction.py:
.venv/Scripts/python tests/test_user_settings_restriction.py
测试覆盖:
- User 类型用户不显示任何配置组
- Admin 类型用户显示所有配置组
- 无 session_manager 时显示所有配置(向后兼容)
手动测试
运行 tests/manual_test_user_settings.py:
.venv/Scripts/python tests/manual_test_user_settings.py
选择测试场景后,可以直观地查看设置界面的显示效果。
验证步骤
- 启动应用,使用
User类型用户登录 - 切换到"设置"标签页
- 确认只显示"测试ERP连接"和"测试数据库连接"两个按钮
- 确认所有配置组都不显示
- 使用
Admin类型用户登录,确认设置界面显示完整内容
技术细节
用户类型判断
is_user_only = self.session_manager and self.session_manager.get_user_type() == 'User'
配置读取
对于测试功能,直接从 ConfigManager 读取配置:
db_type = self.config.get("database.db_type", "sqlserver")
这确保了即使没有 UI 变量,测试功能也能正常工作。
未来扩展
如果需要为不同用户类型提供更多自定义功能,可以在 create_widgets() 方法中添加更多条件判断,例如:
- 为不同用户类型显示不同的配置组
- 为不同用户类型提供不同的默认值
- 添加更多用户类型(如
Guest,Manager等)