Skip to content

权限中心(yidun-union-admin) ​

回答「谁能做什么、能看哪份数据」,并为全平台提供统一的操作日志。

1. 业务定位 ​

两件事:

  1. 授权:运营在控制台维护「用户 → 角色 → 功能权限 / URL 权限」以及「用户 → 数据权限」,通过事件中台下发给网关和各业务模块。
  2. 审计:提供 @OperationLog 注解 SDK,各模块埋点后统一落库、统一查询。

两个可部署应用:yidun-union-admin-console-auth(HTTP 控制台,UserAuthApplication)、yidun-union-admin-facade-dubbo-provider(Dubbo 服务,DubboApplication)。

2. 权限模型 ​

模型说明
union_user / union_role / union_user_role老版单角色模型,仍在使用
user_roleV2 多角色模型(userName + roleCode)
function_permission功能权限:菜单、按钮等可操作项
url_function_permissionURL → 所需功能权限映射,网关据此鉴权
app_data_permission数据权限:用户在某个 app 某个 category 下可见的数据项
data_rule旧版数据权限(productNumber / skuCode / strategyCode 维度)

3. 核心链路 ​

权限数据只经事件下发,各模块不直连权限库。定时对账任务兜底,启动时回补前 12 小时。

4. 操作日志链路 ​

关键点:日志是异步的,切面只负责投递,不阻塞业务;日志查询走 Dubbo 契约 OperateLogFacade。

5. 认证与登录 ​

能力实现
登录认证SSO / 本地认证(OnPremAuthenticationProvider)
令牌JwtTokenService 签发,网关校验
验证码登录失败防爆破
失败锁定连续失败锁定账号
令牌撤销AuthController.logout → Redis 记录,网关可感知
云鉴同步RemoteYunJianService 同步用户信息到网易云鉴

6. 存储与中间件 ​

组件用途
MySQL用户/角色/权限/数据权限/操作日志
Redis令牌撤销、验证码、Spring Session、用户偏好
Kafka操作日志投递
事件中台权限数据分发与对账

7. 设计模式与扩展点 ​

扩展点位置说明
操作日志注解@OperationLog + SystemLogAspect任意方法加注解即可埋点
事件类型UnionEventDataType新增权限数据类型
数据权限元信息yidun-data-permission-meta-dubbo-api各业务应用自己实现 DataPermissionMetaService,向控制台提供数据项定义
缓存同步AbstractCacheSyncTask 子类按数据类型对账

8. 上下游依赖 ​

方向模块说明
上游api-gateway读功能权限缓存做入口鉴权,依赖本模块签发令牌
上游所有业务模块内嵌 log-record-client 记录日志
下游mplatform-event权限数据分发唯一通道

9. 工程约束与变更红线 ​

  • 禁用/删除角色会级联禁用其下所有用户,操作前必须确认影响面。
  • 权限事件漏发 = 大面积失权或越权,对账任务必须保持运行。
  • 日志 SDK 的消息格式不能随便改:几乎所有模块依赖它,改坏会导致全平台审计丢失。
  • 数据权限元信息由业务方实现,控制台只消费契约,不要在此硬编码业务数据项。
  • 口令摘要用统一工具(SignIdUtils),禁止自实现。

10. 关键代码索引 ​

主题路径说明
用户与角色授权yidun-union-admin/service/business/src/main/java/.../service/impl/UserServiceImpl.java用户角色联动
角色状态联动yidun-union-admin/service/business/src/main/java/.../service/impl/RoleServiceImpl.java删除/禁用级联
事件下发出口yidun-union-admin/console/yidun-union-admin-console-auth/src/main/java/.../permission/task/EventSender.java权限事件唯一出口
缓存对账yidun-union-admin/facade/yidun-union-admin-facade-dubbo-provider/src/main/java/.../tasks/cache/定时补推
操作日志切面yidun-union-admin/facade/yidun-union-admin-log-record-client/src/main/java/.../SystemLogAspect.java注解解析与投递
日志落地yidun-union-admin/facade/yidun-union-admin-facade-dubbo-provider/src/main/java/.../log/LogKafkaMqReceiver.javaKafka 消费入库
登录认证yidun-union-admin/console/yidun-union-admin-console-auth/src/main/java/.../controller/AuthController.java登入登出
数据权限yidun-union-admin/service/business/src/main/java/.../AppDataPermissionServiceImpl.java数据项维护

11. 排查要点 ​

现象定位结论
用户看不到某个菜单看角色是否绑定功能权限授权未配或未下发
有菜单但调接口 403看 url_function_permission 映射URL 未绑定功能权限
用户突然失权看角色是否被禁用/删除级联禁用导致
操作日志缺失看注解是否生效、Kafka 是否堆积切面被绕过或消费异常
登录频繁失败看失败锁定与验证码触发防爆破策略
数据权限不生效看业务方是否实现 DataPermissionMetaService未实现则控制台无数据项可选
最近更新

内部资料,请勿外传