---
name: data-permission
when: '数据权限, 行级权限, 数据隔离, 数据范围, 部门权限, 数据可见性, 数据过滤'
scope:
  - backend
products:
  - '*'
id: ka-domain_knowledge-data-permission
asset_kind: domain
lifecycle_status: active
owner_mechanism_id: mc-domain-knowledge
authority: supporting
routes:
  - '*'
primary_triggers:
  - 数据权限
  - 行级权限
  - 数据隔离
  - 数据范围
  - 部门权限
  - 数据可见性
  - 数据过滤
priority: P2
specificity: 3
version: 1.1.0
last_reviewed: '2026-06-01'
consumes: []
emits: []
secondary_triggers: []
negative_triggers: []
type: domain
stages: ["*"]
---

## 业务规则
1. 用户只能查看其权限范围内的数据（按部门、区域、业务线等维度隔离）
2. 数据权限在功能权限之上叠加，即使用户有功能权限，也受数据范围约束
3. 数据权限变更实时生效（非缓存延迟）
4. 管理员可查看全部数据，但仍需审计记录
5. 数据权限必须支持多维度控制：组织架构（部门/区域）、数据范围（本人/本部门/本部门及下级/全部）
6. 数据权限过滤必须在 Repository/Mapper 层实现，禁止在 Service 层硬编码过滤条件
7. 数据权限变更必须实时生效，不能要求用户重新登录

## 约束条件
- 数据权限规则存储在数据权限表中（user_id → scope_type + scope_value）
- MyBatis 拦截器根据当前用户自动注入数据范围过滤条件
- 新建业务表需考虑数据权限字段（如 dept_id、region_id）
- 数据权限查询性能需优化（大批量数据过滤使用 JOIN 而非 IN）
- 数据权限必须与角色解耦，一个角色可配置不同的数据范围
- 管理员（超管）可以查看全部数据，但仍需记录访问日志

## 例外情况
- 系统级数据（字典、配置）不受数据权限约束
- 跨部门协作场景需额外的数据共享授权机制
- 公共数据（如数据字典、系统配置）不受数据权限控制

## 关联模式
参见 auth-permission 模式（功能权限模型）、multi-tenancy 模式（租户级数据隔离）
- auth-permission
- naming-convention
