Files
flower-rain/docs/wyg/sunway-user-sys.md
2025-12-16 15:44:17 +08:00

7.6 KiB
Raw Permalink Blame History

Sunway User Sys 设计方案

1. 文档信息

  • 文档标题基于RBAC的认证服务系统及管理面板产品需求文档
  • 版本1.0
  • 作者Grok 4xAI
  • 创建日期2025-12-16
  • 文档目的本文档定义了一个优秀的基于RBACRole-Based Access Control的认证服务系统及其配套管理面板的需求包括功能设计、系统架构、非功能需求等。旨在为开发团队提供清晰的指导确保系统安全、高效、可扩展。

2. 项目概述

2.1 项目背景

随着企业应用系统的复杂化用户认证和权限管理成为核心需求。RBAC模型通过角色Role来桥接用户User和权限Permission简化了权限分配提高了安全性。本项目旨在开发一个独立的认证服务系统以下简称“认证服务”支持多租户、多应用集成。同时开发一个Web-based的管理面板以下简称“管理面板”用于管理员对用户、角色和权限的集中管理。

2.2 项目目标

  • 提供安全、可靠的认证机制支持JWT、OAuth2等标准协议。
  • 实现细粒度的权限控制,支持动态角色分配。
  • 管理面板提供直观的UI支持用户自助管理和审计日志。
  • 系统设计注重可扩展性,支持微服务架构,便于集成到现有系统中。
  • 确保合规性符合GDPR、CCPA等数据隐私法规。

2.3 目标用户

  • 终端用户:系统使用者,需要认证登录并根据角色访问资源。
  • 管理员:负责用户管理、角色配置和权限审计的人员。
  • 开发者/集成者:将认证服务集成到其他应用的工程师。

2.4 假设与约束

  • 假设系统基于云部署支持容器化Docker/Kubernetes
  • 约束不涉及硬件集成预算未定但优先使用开源技术如Spring Security、Keycloak开发周期目标为3-6个月。

3. 系统架构设计

3.1 高层架构

系统采用微服务架构,分成两个主要模块:

  • 认证服务后端服务使用RESTful API提供认证、授权和令牌管理。技术栈建议Node.js/Express 或 Java/Spring Boot数据库使用PostgreSQL支持JSONB for 权限存储)。
  • 管理面板前端应用使用React/Vue.js框架与认证服务通过API交互。部署为单页应用SPA支持响应式设计。

架构图(文本描述):

[客户端应用] <-- JWT/OAuth --> [认证服务 (API Gateway + Auth Server)]
                                      |
                                      v
[管理面板 (Web UI)] <-- Secure API --> [数据库 (Users, Roles, Permissions)]
                                      |
                                      v
[审计日志 & 监控] <-- Integration --> [外部服务 (e.g., Email, Cache)]

3.2 RBAC模型设计

RBAC核心组件

  • 用户User唯一标识如UUID包含基本信息用户名、邮箱、密码哈希
  • 角色Role用户所属的角色组如“Admin”、“User”、“Guest”。支持角色继承e.g., Admin 继承 User 的权限)。
  • 权限Permission细粒度操作如“read:resource”、“write:document”。权限可绑定到角色支持通配符e.g., “*:resource”表示所有操作
  • 会话Session基于JWT的令牌包含用户ID、角色列表和过期时间。

扩展设计:

  • 支持组Group用户可属于多个组组可绑定角色。
  • 动态权限通过规则引擎e.g., OPA - Open Policy Agent支持上下文-based授权如基于IP、时间
  • 多租户:每个租户有独立的角色/权限命名空间。

3.3 数据模型ER图简述

  • User表id (PK), username, email, password_hash, status, created_at。
  • Role表id (PK), name, description, parent_role_id (for 继承)。
  • Permission表id (PK), name, description。
  • User_Role表user_id (FK), role_id (FK)。
  • Role_Permission表role_id (FK), permission_id (FK)。
  • Audit_Log表id (PK), user_id, action, timestamp, details。

3.4 集成与扩展

  • 支持OAuth2/OpenID Connect与Google、GitHub等第三方登录集成。
  • API网关使用Kong/Nginx支持速率限制和CORS。
  • 缓存使用Redis提升认证性能。
  • 监控集成Prometheus/Grafana for metrics。

4. 功能需求

4.1 认证服务功能

  1. 用户注册与认证

    • 支持邮箱/手机号注册,验证码验证。
    • 登录:用户名/密码、OAuth2、社会化登录。
    • 密码重置:通过邮箱链接。
    • 多因素认证MFA支持TOTPGoogle Authenticator
  2. 授权与令牌管理

    • 生成JWT令牌包含claimsuser_id, roles, permissions
    • 令牌验证中间件集成支持黑名单revoke token
    • 刷新令牌使用refresh token延长会话。
  3. RBAC核心功能

    • 角色创建/编辑/删除。
    • 权限分配:批量绑定到角色。
    • 用户角色分配:支持批量操作。
    • 权限检查API端点装饰器e.g., @RequirePermission('read:resource'))。
  4. 审计与日志

    • 记录所有认证/授权事件。
    • 支持导出日志 for 合规审计。

4.2 管理面板功能

  1. 仪表盘

    • 显示用户统计、活跃角色、最近日志。
  2. 用户管理

    • CRUD操作创建、读取、更新、删除用户。
    • 搜索/过滤:按角色、状态。
    • 批量导入CSV/Excel。
  3. 角色与权限管理

    • 角色CRUD可视化继承树。
    • 权限CRUD树状结构显示。
    • 分配界面:拖拽式绑定用户/角色/权限。
  4. 系统设置

    • 配置MFA、令牌过期时间。
    • 集成第三方服务e.g., SMTP for email
  5. 安全功能

    • 角色-based面板访问e.g., 只允许Admin访问
    • 会话超时、CSRF保护。

4.3 API设计

  • 认证API

    • POST /auth/register注册用户。
    • POST /auth/login登录返回JWT。
    • GET /auth/validate验证令牌。
  • 管理API

    • GET /users列出用户需Admin权限
    • POST /roles创建角色。

所有API使用Swagger/OpenAPI文档化。

5. 非功能需求

5.1 性能

  • 响应时间:<200ms for 认证API。
  • 并发支持:>1000用户/秒(使用负载均衡)。
  • 扩展性:水平扩展,支持集群部署。

5.2 安全性

  • 加密密码使用bcrypt哈希传输使用HTTPS。
  • 防护防SQL注入、XSS、CSRF。
  • 合规:数据加密 at rest支持数据删除请求。

5.3 可用性与可靠性

  • 可用性99.9% uptime。
  • 备份:每日数据库备份。
  • 错误处理:优雅降级,日志记录。

5.4 用户体验

  • 管理面板:响应式设计,支持多语言(中/英)。
  • 可访问性符合WCAG 2.1标准。

5.5 技术要求

  • 前端HTML5, CSS3, JavaScript (ES6+)。
  • 后端RESTful, JSON格式。
  • 测试:单元测试覆盖率>80%;集成测试 for API。

6. 风险与缓解

  • 风险:安全漏洞。缓解:第三方审计,定期渗透测试。
  • 风险:集成复杂。缓解提供SDK for 常见框架e.g., Express middleware
  • 风险:数据迁移。缓解支持从LDAP/Active Directory导入。

7. 附录

  • 术语表RBAC - Role-Based Access ControlJWT - JSON Web Token。
  • 参考NIST RBAC标准OWASP安全指南。
  • 下一步基于本PRD进行详细设计文档SDD和原型开发。

此文档为初始版本可根据反馈迭代。如果需要更详细的架构图、API规格或代码示例请提供进一步指示。