feat: implement user authentication and permission-based data filtering

Add user login system with role-based access control:
- Admin users see all data and can filter by any manager
- Regular users only see records where ManagerName matches their username

New components:
- BIPUsersDAO: user authentication and management
- SessionManager: singleton session state management
- LoginDialog: modal login UI for app startup
- init_users.sql: initial user setup script

Permission enforcement:
- Material validation tab: hide manager filter for non-admin, force filter by current user
- Material type management: hide filter UI for non-admin, filter at database level
- Window title and status bar display current user info

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-02-09 18:17:31 +08:00
parent 57c23f4608
commit 04b99292ad
10 changed files with 607 additions and 22 deletions

View File

@@ -14,10 +14,14 @@ ERP 自动化工具 - GUI 版本
- 物料校验:校验物料状态并匹配待删除物料
- 数据查询:查询生产订单号等信息
- 设置管理:管理系统配置
- 用户认证:基于用户权限的数据访问控制
"""
import tkinter as tk
from tkinter import messagebox
from gui.main_window import MainWindow
from gui.login_dialog import LoginDialog
from auth.session_manager import SessionManager
def main():
@@ -25,8 +29,27 @@ def main():
# 创建根窗口
root = tk.Tk()
# 创建主窗口
app = MainWindow(root)
# 显示登录对话框
login_dialog = LoginDialog(root)
credentials = login_dialog.get_credentials()
if not credentials:
# 用户取消登录或关闭对话框
root.destroy()
return
username, password = credentials
# 认证并初始化会话
session_manager = SessionManager.get_instance()
if not session_manager.login(username, password):
messagebox.showerror("登录失败", "用户名或密码错误")
root.destroy()
return
# 创建主窗口(传入 session_manager
app = MainWindow(root, session_manager)
# 启动主事件循环
root.mainloop()