跳到主要内容
版本:0.3.x(Latest)

基本介绍

BizCtxService为插件提供当前请求的业务上下文只读投影。它将宿主内部复杂的请求上下文模型封装为一个稳定的CurrentContext快照,插件通过services.BizCtx()获取后读取用户、租户、模拟状态等信息,无需了解宿主内部的上下文存储机制。

该服务几乎所有需要感知请求身份的插件都会使用,是最基础的上下文读取能力之一。

设计思路

BizCtxService的核心设计是只读投影。宿主在请求进入业务处理前,将认证、租户解析、模拟检测等结果注入请求上下文。BizCtxService将这些结果投影为CurrentContext结构体,插件只能读取,不能修改。

CurrentContext包含以下关键字段:

字段类型说明
UserIDint当前认证用户ID
Usernamestring当前认证用户名
TenantIDint当前请求租户ID,0表示平台上下文
ActingUserIDint模拟场景下的真实管理员ID
ActingAsTenantbool是否以租户视角操作
IsImpersonationbool当前Token是否为模拟令牌
PlatformBypassbool是否允许绕过租户过滤

PlatformBypass的语义是:当TenantID0时自动标记为true,表示该请求运行在平台范围,可以跨租户读取数据。插件在需要跨租户查询时应检查此字段。

架构位置

BizCtxService位于请求管线的输出端,是其他服务和插件业务逻辑获取请求身份的统一入口:

该服务是请求上下文信息的"消费者",由以下"生产者"提供数据:

  • AuthService:认证中间件使用AuthService验证Token后写入用户身份
  • TenantService:租户解析中间件使用TenantService解析租户后写入租户信息
  • 模拟检测中间件:检测Token中的模拟标记后写入ActingUserIDIsImpersonation

主要能力

方法说明
Current返回当前请求的CurrentContext只读快照,包含用户、租户、模拟状态等字段

CurrentBizCtxService唯一的方法,设计意图是保持接口极简。所有请求上下文信息都封装在CurrentContext一个结构体中,插件按需读取字段。

设计约束

  • 只读投影,不可修改。 BizCtxService返回的是快照,插件不能通过它修改请求上下文。需要修改上下文的场景(如租户切换)应使用AuthService
  • 不暴露宿主内部类型。 CurrentContext是插件可见的稳定投影,不暴露宿主内部的上下文模型、数据库实体或认证状态类型。
  • 零值表示缺失。 当上下文不可用时(如非HTTP请求、中间件未注入),Current返回零值结构体,不返回错误。插件应检查关键字段是否为零值。
  • PlatformBypass由宿主判定。 插件不应自行设置或修改PlatformBypass标记,该字段由宿主根据TenantID自动判定。

相关服务