# 用户类型限制设置界面功能 ## 概述 实现了基于用户类型的设置界面访问控制。对于 `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`: ```bash .venv/Scripts/python tests/test_user_settings_restriction.py ``` 测试覆盖: 1. User 类型用户不显示任何配置组 2. Admin 类型用户显示所有配置组 3. 无 session_manager 时显示所有配置(向后兼容) ### 手动测试 运行 `tests/manual_test_user_settings.py`: ```bash .venv/Scripts/python tests/manual_test_user_settings.py ``` 选择测试场景后,可以直观地查看设置界面的显示效果。 ## 验证步骤 1. 启动应用,使用 `User` 类型用户登录 2. 切换到"设置"标签页 3. 确认只显示"测试ERP连接"和"测试数据库连接"两个按钮 4. 确认所有配置组都不显示 5. 使用 `Admin` 类型用户登录,确认设置界面显示完整内容 ## 技术细节 ### 用户类型判断 ```python is_user_only = self.session_manager and self.session_manager.get_user_type() == 'User' ``` ### 配置读取 对于测试功能,直接从 `ConfigManager` 读取配置: ```python db_type = self.config.get("database.db_type", "sqlserver") ``` 这确保了即使没有 UI 变量,测试功能也能正常工作。 ## 未来扩展 如果需要为不同用户类型提供更多自定义功能,可以在 `create_widgets()` 方法中添加更多条件判断,例如: - 为不同用户类型显示不同的配置组 - 为不同用户类型提供不同的默认值 - 添加更多用户类型(如 `Guest`, `Manager` 等)