pai-smart架构流程详解(用户管理模块)

张开发
2026/4/14 1:51:12 15 分钟阅读

分享文章

pai-smart架构流程详解(用户管理模块)
用户管理模块负责处理用户的注册、登录和权限控制功能。该模块的核心目标是确保用户身份的安全性。提供灵活的权限管理机制支持基于角色的访问控制通过 RBAC 实现对不同角色如普通用户和管理员的功能权限区分通过组织标签实现数据访问权限隔离。为其他模块提供用户信息支持。功能需求技术选型关键流程用户注册前端提交username/email password 组织标签(可选) 验证码(可选)。后端先做参数校验再查重用户名唯一。密码使用 BCrypt 加盐哈希后入库不存明文。写入用户基础信息、默认角色普通用户、状态启用/待激活。返回注册成功不回传密码相关信息。流程简单传统就不多说了值得注意的点是注册成功后不光是把个人信息数据保存在MySql中而且将组织标签保存在Redis用户登录前端提交username/email password。后端按用户名查用户使用 BCrypt.compare 校验密码。校验通过后生成 JWT建议含 userId/role/orgTags/tokenVersion/exp返回访问令牌可配合刷新令牌实现续期。后续请求统一带 Token 进入鉴权中间件。当第3步登陆完之后签发两个令牌access令牌和刷新令牌access令牌中包含个人信息和组织标签刷新令牌的id专门负责登录鉴权刷新令牌将刷新令牌id存入redis里负责将过期的access令牌刷新并且负责用户的拉黑登录时不光查access令牌的有效性还查对应的刷新令牌的有效性功能权限RBACABACRBAC Role-Based Access Control基于角色的访问控制一句话理解给“角色”分权限用户只需要被分配角色ABAC Attribute-Based Access Control基于属性的访问控制根据“属性 规则”动态决定有没有权限1. 功能权限请求管理基于用户角色的访问控制在SecurityConfig.java 中定义了不同角色的访问权限规则权限规则 -公开接口如登录注册无需认证-普通用户接口如文件上传、聊天需要 USER 或 ADMIN 角色-管理员接口如系统管理仅允许 ADMIN 角色访问直接在请求未进入业务层进行拦截hasrole参考 SecurityContext2. 数据权限请求管理基于组织标签的资源访问控制 核心实现 - 组织标签授权过滤器 OrgTagAuthorizationFilter.java 实现了基于组织标签的授权逻辑- 多级访问控制 1. 私人空间 仅资源创建者可访问以 PRIVATE_ 前缀标识2. 组织资源 组织成员可访问3. 公开资源 所有用户可访问- 从请求中提取资源ID- 获取资源的组织标签信息- 检查用户是否为资源拥有者- 检查用户是否为管理员- 检查资源是否为公开资源- 检查用户组织标签是否与资源组织标签匹配3. 权限验证流程1.用户发出请求获得请求头里的token里面提取出用户的角色信息和组织标签2.JwtAuthenticationFilter解析Token并设置用户认证信息过滤器把用户认证信息放入 SecurityContext。把认证信息放入SecurityContext作用.Spring Security 判权限时就是从 SecurityContext 里取当前 Authentication 的权限列表让hasRole能工作.让后续代码拿到“当前登录用户”控制器、服务、审计日志、AOP 都能统一从上下文取用户身份而不用每个接口重复手动解析 JWT。.让整条请求链保持同一登录态一次请求里过滤器、鉴权器、业务层都基于同一份认证信息避免各层重复校验和不一致3.OrgTagAuthorizationFilter负责资源级权限检查。它会从 token 提取 userId/role/orgTags并在部分接口放到请求属性中。4.对带资源 ID 的请求过滤器先解析资源 ID再查资源归属信息owner、orgTag、isPublic5.先验证资源是不是公共资源或者为默认组织6.通过role判断判断是否资源拥有者/管理员7.通过角色的组织标签属性ABAC查询

更多文章