# 用户权限系统使用指南 ## 📋 系统概述 期货智析系统现已集成完整的用户权限管理系统,所有页面需要进行登录才能访问。系统支持两种用户角色: - **管理员 (admin)**: 可以访问品种分析界面和系统管理界面 - **普通用户 (user)**: 只能访问品种分析界面 ## 🔐 默认账户 系统首次启动时会自动创建默认管理员账户: | 字段 | 值 | |------|------| | **用户名** | `lxy_root` | | **密码** | `admin123` | | **角色** | 管理员 (admin) | | **邮箱** | `admin@system.local` | ⚠️ **重要**: 首次登录后请立即修改默认密码! ## 🚀 使用流程 ### 1. 访问系统 打开浏览器访问:`http://localhost:9600` 系统会自动重定向到登录页面。 ### 2. 登录 1. 输入用户名和密码 2. 点击"登录"按钮 3. 系统验证成功后会根据用户角色进行跳转 ### 3. 角色跳转逻辑 #### 普通用户 - 登录后直接进入 **品种分析** 界面 - 访问地址:`http://localhost:9600/futures-analysis` #### 管理员用户 - 登录后进入 **角色选择** 页面 - 可选择进入: - **品种分析** - 智能期货分析工具 - **系统管理** - 后台管理配置界面 ### 4. 退出登录 在任意页面点击"退出登录"按钮,或在角色选择页面点击退出。 ## 📁 文件结构 ``` app/ ├── user_models.py # 用户数据库模型 ├── auth_service.py # 认证服务(密码加密、会话管理) ├── api/ │ └── auth.py # 认证API路由 ├── static/ │ ├── login.html # 登录页面 │ └── role_select.html # 角色选择页面 └── main.py # 主入口(已集成认证) ``` ## 🔧 API接口 ### 1. 用户登录 **POST** `/api/v1/auth/login` **请求体:** ```json { "username": "lxy_root", "password": "admin123" } ``` **响应:** ```json { "success": true, "token": "jr1xNX4egsLRStvVYLnkJj8uruB902VwCG4z3Wuy6dc", "user": { "id": 1, "username": "lxy_root", "role": "admin", "email": "admin@system.local" }, "message": "登录成功" } ``` ### 2. 验证令牌 **GET** `/api/v1/auth/verify` **请求头:** ``` Authorization: Bearer ``` **响应:** ```json { "success": true, "user": { "id": 1, "username": "lxy_root", "role": "admin", "email": "admin@system.local", "last_login": "2026-05-24T15:30:00" } } ``` ### 3. 获取当前用户信息 **GET** `/api/v1/auth/me` **请求头:** ``` Authorization: Bearer ``` ### 4. 用户登出 **POST** `/api/v1/auth/logout` **请求头:** ``` Authorization: Bearer ``` ## 🗄️ 数据库表 系统创建了两个新表: ### 1. users 表 - 用户信息 | 字段 | 类型 | 说明 | |------|------|------| | id | INTEGER | 主键 | | username | VARCHAR(50) | 用户名(唯一) | | password_hash | VARCHAR(255) | 密码哈希 | | email | VARCHAR(100) | 邮箱 | | role | VARCHAR(20) | 角色 (admin/user) | | is_active | BOOLEAN | 是否启用 | | created_at | DATETIME | 创建时间 | | last_login | DATETIME | 最后登录时间 | ### 2. sessions 表 - 会话管理 | 字段 | 类型 | 说明 | |------|------|------| | id | INTEGER | 主键 | | user_id | INTEGER | 用户ID | | token | VARCHAR(255) | 会话令牌(唯一) | | created_at | DATETIME | 创建时间 | | expires_at | DATETIME | 过期时间 | | is_valid | BOOLEAN | 是否有效 | ## 🔒 安全特性 1. **密码加密**: 使用 SHA-256 + 随机盐值加密存储 2. **会话管理**: 使用安全令牌,24小时自动过期 3. **权限控制**: 基于角色的访问控制 (RBAC) 4. **自动清理**: 过期会话自动标记为无效 ## 👥 用户管理 ### 创建新用户 可以通过Python脚本或直接操作数据库创建用户: ```python from app.database import SessionLocal from app import auth_service db = SessionLocal() try: auth_service.create_user( db=db, username='new_user', password='secure_password', email='user@example.com', role='user' # 或 'admin' ) finally: db.close() ``` ### 修改用户角色 ```python from app.database import SessionLocal from app.user_models import User db = SessionLocal() try: user = db.query(User).filter(User.username == 'username').first() user.role = 'admin' # 或 'user' db.commit() finally: db.close() ``` ### 禁用用户 ```python user.is_active = False db.commit() ``` ## 🎯 页面访问控制 | 页面 | 需要登录 | 需要角色 | |------|---------|---------| | `/login` | ❌ | ❌ | | `/futures-analysis` | ✅ | 任意 | | `/role-select` | ✅ | admin | | `/ui` | ✅ | admin | | `/ai-config` | ✅ | 任意 | | `/api/v1/*` | 部分接口 | 视接口而定 | ## 🐛 故障排查 ### 1. 登录后无法访问页面 - 检查浏览器控制台是否有错误 - 确认localStorage中保存了auth_token - 尝试清除浏览器缓存后重新登录 ### 2. 令牌过期 - 会话令牌24小时过期 - 过期后需要重新登录 - 可在代码中修改 `expires_hours` 参数 ### 3. 忘记管理员密码 可以通过数据库重置: ```python from app.database import SessionLocal from app import auth_service db = SessionLocal() try: from app.user_models import User admin = db.query(User).filter(User.username == 'lxy_root').first() admin.password_hash = auth_service.hash_password('new_password') db.commit() print("密码已重置") finally: db.close() ``` ## 📝 最佳实践 1. ✅ 首次登录后修改默认密码 2. ✅ 定期清理过期会话 3. ✅ 为不同用户分配最小权限原则 4. ✅ 定期检查用户登录日志 5. ✅ 备份用户数据库表 ## 🔗 相关文档 - [部署指南](./DEPLOY.md) - [系统架构](./DESIGN.md) - [API文档](http://localhost:9600/docs)