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

3.1 KiB
Raw Permalink Blame History

用户类型限制设置界面功能

概述

实现了基于用户类型的设置界面访问控制。对于 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_managerSettingsTab 构造函数

功能特性

User 类型用户

  • 可见内容: 仅两个按钮
    • 测试 ERP 连接
    • 测试数据库连接
  • 隐藏内容: 所有配置组
    • ERP 系统配置
    • 数据库配置
    • 浏览器设置
    • 路径设置
    • 数据提取设置
    • 物料校验设置
  • 隐藏按钮:
    • 保存设置
    • 恢复默认

Admin 类型用户

  • 显示完整的设置界面(所有配置组和所有按钮)

向后兼容

  • 如果不传入 session_manager 参数,默认显示完整界面
  • 这确保了不破坏现有代码

测试

自动化测试

运行 tests/test_user_settings_restriction.py:

.venv/Scripts/python tests/test_user_settings_restriction.py

测试覆盖:

  1. User 类型用户不显示任何配置组
  2. Admin 类型用户显示所有配置组
  3. 无 session_manager 时显示所有配置(向后兼容)

手动测试

运行 tests/manual_test_user_settings.py:

.venv/Scripts/python tests/manual_test_user_settings.py

选择测试场景后,可以直观地查看设置界面的显示效果。

验证步骤

  1. 启动应用,使用 User 类型用户登录
  2. 切换到"设置"标签页
  3. 确认只显示"测试ERP连接"和"测试数据库连接"两个按钮
  4. 确认所有配置组都不显示
  5. 使用 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 等)