data model注释补全

This commit is contained in:
Shen Wei
2026-04-30 06:57:02 +08:00
parent eada3af824
commit 91fc0b06d6
5 changed files with 216 additions and 172 deletions

View File

@@ -115,7 +115,7 @@ PermissionChangeLog (append-only) ← 所有变更流水
| 字段 | 类型 | 约束 | 业务说明 |
|------|------|------|---------|
| id | UUID | PK | |
| id | UUID | PK | 主键(系统生成,业务无关) |
| code | VARCHAR(150) | UNIQUE, NOT NULL | 权限编码,规则:`{module}.{sub_module}.{action}[.{qualifier}]`,如 `client.private.view.scope` |
| module | VARCHAR(50) | NOT NULL | 一级模块枚举(见 §4.1 |
| sub_module | VARCHAR(50) | | 二级模块(如 `二手&租赁``商圈精耕` |
@@ -132,8 +132,8 @@ PermissionChangeLog (append-only) ← 所有变更流水
| is_active | BOOLEAN | NOT NULL DEFAULT TRUE | 下线权限项置 FALSE历史记录保留 |
| is_deprecated | BOOLEAN | NOT NULL DEFAULT FALSE | 废弃标记(不再推荐使用但保持兼容) |
| version | INTEGER | NOT NULL DEFAULT 1 | 权限项定义版本,变更时递增,用于缓存失效 |
| created_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| updated_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| created_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 记录创建时间(系统自动) |
| updated_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 记录最后更新时间(系统自动) |
**关键索引**
```sql
@@ -153,18 +153,18 @@ CREATE INDEX idx_permission_defs_active ON permission_defs(is_active) WHERE is_a
| 字段 | 类型 | 约束 | 业务说明 |
|------|------|------|---------|
| id | UUID | PK | |
| id | UUID | PK | 主键(系统生成,业务无关) |
| name | VARCHAR(100) | NOT NULL | 角色名称 |
| category | VARCHAR(30) | NOT NULL, CHECK | `agent`(置业顾问) / `store_manager`(店管) / `director`(总经) / `operator`(运营) / `custom`(见 §4.3 |
| description | TEXT | | 角色描述 |
| template_role_id | UUID | FK→roles, SET NULL | 权限模板来源角色PRD「引用该角色配置」列 |
| is_system_builtin | BOOLEAN | NOT NULL DEFAULT FALSE | 系统内置角色(如"最大权限角色"),不可删除、不可改名 |
| is_active | BOOLEAN | NOT NULL DEFAULT TRUE | |
| is_active | BOOLEAN | NOT NULL DEFAULT TRUE | 角色是否启用FALSE=禁用(员工无法继承该角色权限) |
| created_by | UUID | FK→staff, SET NULL | 创建人PRD: 角色类别只能由创建者修改) |
| created_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| updated_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| updated_by | UUID | FK→staff, SET NULL | |
| deleted_at | TIMESTAMPTZ | | 软删除 |
| created_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 记录创建时间(系统自动) |
| updated_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 记录最后更新时间(系统自动) |
| updated_by | UUID | FK→staff, SET NULL | 最后修改人(权限管理审计用) |
| deleted_at | TIMESTAMPTZ | | 软删除时间戳NULL=未删除非NULL=已软删除 |
**关键索引**
```sql
@@ -185,13 +185,13 @@ CREATE INDEX idx_roles_template ON roles(template_role_id);
| 字段 | 类型 | 约束 | 业务说明 |
|------|------|------|---------|
| id | UUID | PK | |
| role_id | UUID | NOT NULL, FK→roles, CASCADE | |
| permission_def_id | UUID | NOT NULL, FK→permission_defs, RESTRICT | |
| id | UUID | PK | 主键(系统生成,业务无关) |
| role_id | UUID | NOT NULL, FK→roles, CASCADE | 所属角色(稀疏存储:角色删除时级联清理权限值) |
| permission_def_id | UUID | NOT NULL, FK→permission_defs, RESTRICT | 权限定义RESTRICT防止删除仍被引用的权限项 |
| value | JSONB | NOT NULL | 统一格式 `{"v": <value>}`,如 `{"v": true}` / `{"v": "store"}` / `{"v": 50}` |
| created_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| updated_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| updated_by | UUID | FK→staff, SET NULL | |
| created_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 记录创建时间(系统自动) |
| updated_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 记录最后更新时间(系统自动) |
| updated_by | UUID | FK→staff, SET NULL | 最后修改人(权限审计用) |
**关键索引**
```sql
@@ -208,12 +208,12 @@ CREATE INDEX idx_role_permissions_def ON role_permissions(permission_def_id);
| 字段 | 类型 | 约束 | 业务说明 |
|------|------|------|---------|
| id | UUID | PK | |
| staff_id | UUID | NOT NULL, FK→staff, CASCADE | |
| id | UUID | PK | 主键(系统生成,业务无关) |
| staff_id | UUID | NOT NULL, FK→staff, CASCADE | 所属员工(员工删除时级联删除角色关联) |
| role_id | UUID | NOT NULL, FK→roles, PROTECT | 角色被员工引用时禁止删除 |
| is_primary | BOOLEAN | NOT NULL DEFAULT FALSE | 主角色标识每个员工有且仅有一个主角色Issue #5 |
| assigned_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| assigned_by | UUID | FK→staff, SET NULL | |
| assigned_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 角色分配时间(系统自动) |
| assigned_by | UUID | FK→staff, SET NULL | 分配操作人(管理员) |
| valid_from | DATE | | 生效日(预留未来"定时生效"功能) |
| valid_until | DATE | | 失效日 |
@@ -232,14 +232,14 @@ CREATE INDEX idx_staff_roles_role ON staff_roles(role_id);
| 字段 | 类型 | 约束 | 业务说明 |
|------|------|------|---------|
| id | UUID | PK | |
| staff_id | UUID | NOT NULL, FK→staff, CASCADE | |
| permission_def_id | UUID | NOT NULL, FK→permission_defs, RESTRICT | |
| id | UUID | PK | 主键(系统生成,业务无关) |
| staff_id | UUID | NOT NULL, FK→staff, CASCADE | 所属员工(员工删除时级联删除覆盖记录) |
| permission_def_id | UUID | NOT NULL, FK→permission_defs, RESTRICT | 被覆盖的权限项 |
| value | JSONB | NOT NULL | 个人权限值,同 `{"v": ...}` 格式 |
| override_mode | VARCHAR(10) | NOT NULL DEFAULT 'REPLACE' | `REPLACE`(覆盖角色合并值PRD 默认) / `RESTRICT`(限制上限) / `GRANT`(仅扩展) — Issue #6 |
| reason | TEXT | | 管理员备注(建议强制,为后续审计) |
| modified_by | UUID | FK→staff, SET NULL | |
| modified_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| modified_by | UUID | FK→staff, SET NULL | 执行个人权限修改的管理员 |
| modified_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 最近修改时间(系统自动) |
**关键索引**
```sql
@@ -257,14 +257,14 @@ CREATE INDEX idx_staff_overrides_staff ON staff_permission_overrides(staff_id);
| 字段 | 类型 | 约束 | 业务说明 |
|------|------|------|---------|
| id | UUID | PK | |
| staff_id | UUID | NOT NULL, FK→staff, CASCADE | |
| id | UUID | PK | 主键(系统生成,业务无关) |
| staff_id | UUID | NOT NULL, FK→staff, CASCADE | 所属员工(员工删除时级联删除范围记录) |
| scope_type | VARCHAR(20) | NOT NULL, CHECK | `self` / `group` / `store` / `area` / `region` / `company` / `custom_unit` |
| org_unit_id | UUID | FK→org_units, RESTRICT | `scope_type='custom_unit'` 时必填,指向具体的组织节点;其他类型时 NULL`staff.org_unit_id` 动态推导) |
| is_readable | BOOLEAN | NOT NULL DEFAULT TRUE | 可读 |
| is_writable | BOOLEAN | NOT NULL DEFAULT FALSE | 可写(默认只读) |
| granted_by | UUID | FK→staff, SET NULL | |
| granted_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| granted_by | UUID | FK→staff, SET NULL | 授权操作人(管理员) |
| granted_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 授权时间(系统自动) |
| expires_at | TIMESTAMPTZ | | 临时授权失效时间 |
| reason | TEXT | | 授予原因 |
@@ -288,7 +288,7 @@ CREATE INDEX idx_data_scopes_expires ON staff_data_scopes(expires_at) WHERE expi
| 字段 | 类型 | 约束 | 业务说明 |
|------|------|------|---------|
| id | UUID | PK | |
| id | UUID | PK | 主键(系统生成,业务无关) |
| target_type | VARCHAR(30) | NOT NULL, CHECK | `role` / `role_permission` / `staff_role` / `staff_override` / `staff_scope` |
| target_id | UUID | NOT NULL | 被变更对象的 ID上述各表的主键 |
| staff_id | UUID | FK→staff, SET NULL | 被影响员工target 是 `staff_role/staff_override/staff_scope` 时必填,便于按员工查询) |
@@ -301,7 +301,7 @@ CREATE INDEX idx_data_scopes_expires ON staff_data_scopes(expires_at) WHERE expi
| operator_ip | INET | | 操作来源 IP |
| user_agent | TEXT | | 操作终端 UA |
| reason | TEXT | | 操作原因(批量设置角色等场景强制填写) |
| operated_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | |
| operated_at | TIMESTAMPTZ | NOT NULL DEFAULT NOW() | 操作时间append-only流水系统自动 |
| ⚠️ 无 deleted_at | — | — | 审计日志**不可删除** |
**关键索引**