feat: implement user type-based UI access control

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>
This commit is contained in:
Misaka_Company
2026-02-10 17:30:26 +08:00
parent db461e39f9
commit d18bedcd77
4 changed files with 219 additions and 79 deletions

View File

@@ -0,0 +1,105 @@
# 用户类型限制设置界面功能
## 概述
实现了基于用户类型的设置界面访问控制。对于 `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` 等)