SuperAPI AI 工具集

backoffice

办公与效率

查看项目

更新于 10-16 06:22

技能介绍

用途:backoffice 是平台员工专用的 /backoffice 管理区域,用于跨组织管理,例如复现客户报告的缺陷、抽查各租户数据,以及未来用于支持场景的用户模拟。访问权限由 users.role === "admin" 控制。

主要能力与安全约束:核心不变量是非管理员(无论是否已认证)都不得访问、枚举或探测 backoffice 表面,每个响应都必须与随机 404 无法区分。该约束由三层独立守卫实现,每层单独都足以阻断发布。

三层守卫:一、路由加载守卫(UI 层),在 apps/web/src/routes/backoffice/route.tsx 的 beforeLoad 与 loader 中断言 user.role === "admin",失败时抛出 notFound()(而非 redirect 或 403,以免泄露路径);借助 TanStack Start 代码分割,非管理员不会加载 backoffice 代码块。二、服务端函数守卫(RPC 层),每个 backoffice createServerFn 处理器必须挂载 adminMiddleware,该中间件绕过 Better Auth cookie 缓存获取会话(使数据库层面的角色降级在下次请求即生效),以 NotFoundError 拒绝非管理员,并注入 context.adminUserId 与 context.user。中间件在 inputValidator 之前运行。唯一例外是 stopImpersonating,它使用 impersonatingMiddleware,因为模拟期间当前会话角色为目标用户角色。三、数据库访问守卫,管理查询通过 getAdminPostgresClient() 使用独立的 LAT_ADMIN_DATABASE_URL 超级用户连接池,withPostgres 默认组织范围为 OrganizationId("system"),这是跳过 RLS 的唯一许可信号。

使用方式与结构:@domain/admin 包按功能分文件夹(search、users 等),每个功能包含 Zod schema、repository 端口、用例与测试;Web 应用在 apps/web/src/domains/admin/ 下按功能拆分 .functions.ts 与测试,路由位于 apps/web/src/routes/backoffice/<feature>/。不要在 createServerFn 外再包工厂函数,否则 Vite 插件无法识别服务端函数,导致仅 Node 模块泄漏进浏览器包。

限制与纪律:管理守卫失败一律使用 NotFoundError,不得返回 401/403/redirect,错误路径日志不得提及 admin 或 role。users.role 是全局平台员工标志,仅 DBA 可改;members.role 是组织内角色,二者概念不同。测试方面,用例测试使用假端口,适配器测试使用 PGlite,守卫测试覆盖 admin/user/null/undefined/缺失角色并断言错误形状不泄露管理表面。