Files
ljwx-platform-bak/contracts/security/tenant-policy.md
T
2026-02-14 19:10:12 +08:00

1.4 KiB
Raw Blame History

租户安全策略

隔离级别

LJWX Platform 采用行级隔离(Row-Level Isolation),所有租户共享同一数据库 schema。tenant-scoped 表通过 tenant_id 列区分数据归属。

表级分类

  • 全局表(不含 tenant_id):tenants、permissions。这些表的数据对所有租户可见或由平台统一管理。
  • tenant-scoped 表(含 tenant_id):users、roles、user_roles、role_permissions、audit_log。这些表的每条数据都归属于特定租户。

tenant_id 来源

tenant_id 仅从 JWT token 中提取,经过 JwtAuthenticationFilter 解析后存入 Spring Security 的 SecurityContext(UserContext 对象)。业务代码通过 SecurityContextHolder.requireTenantId() 获取当前租户 ID。

严格禁止从请求参数、路径变量、请求体(DTO)中获取 tenant_id 用于数据过滤或写入。即使请求体中携带 tenant_id 字段,服务端也会忽略并使用 SecurityContext 中的值强制覆盖。

跨租户访问防护

当用户试图访问不属于其租户的资源时,系统返回 HTTP 403,错误码为 TENANT_ACCESS_DENIED。所有 tenant-scoped 表的 SQL 查询必须包含 WHERE tenant_id = ? 条件(由 Repository 实现层保证)。

MVP 限制

  • 不实现跨租户的 super_admin 角色
  • 不对外提供创建租户的 API(租户通过 seed 和运维脚本管理)
  • 不实现租户级别的配置隔离