Files
playwrite/docs/USER_SETTINGS_RESTRICTION.md
Misaka_Company d18bedcd77 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>
2026-02-10 17:30:26 +08:00

106 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户类型限制设置界面功能
## 概述
实现了基于用户类型的设置界面访问控制。对于 `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` 等)