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>
106 lines
3.1 KiB
Markdown
106 lines
3.1 KiB
Markdown
# 用户类型限制设置界面功能
|
||
|
||
## 概述
|
||
实现了基于用户类型的设置界面访问控制。对于 `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` 等)
|