20260907172356

This commit is contained in:
oneao committed 2026-09-07 17:23:56 +08:00
1 parent 78825797e7
commit 1b596ffa5b
4 files changed
+1123 -261

No files matched your search

+96 -7
View File
@@ -141,7 +141,49 @@ create index ix_s_field_query_order
on dbo.s_field_query (b_module_id, b_xh, b_field, b_condition_no);
```
## 4. 自动编码
## 4. 用户个性化
> 用户个性化只作用于列表布局和普通查询收起态,不改变模块级默认配置。权限过滤优先于个人偏好,个人偏好不能越过字段权限或字段 `b_canuse` 限制。
```sql
create table dbo.s_user_field_pref (
b_user_id varchar(50) not null,
b_module_id varchar(50) not null,
b_field varchar(50) not null,
b_mode varchar(10) not null, -- 'view' 查看列表 / 'edit' 可编辑列表
b_visible tinyint not null default 1,
b_xh int not null default 0,
b_width int null,
b_updatedatetime datetime2 null,
primary key (b_user_id, b_module_id, b_field, b_mode)
);
create index ix_s_user_field_pref_order
on dbo.s_user_field_pref (b_user_id, b_module_id, b_mode, b_xh, b_field);
create table dbo.s_user_query_field_pref (
b_user_id varchar(50) not null,
b_module_id varchar(50) not null,
b_field varchar(50) not null,
b_quick_visible tinyint not null default 1, -- 普通查询收起态是否显示
b_xh int not null default 0, -- 普通查询字段顺序
b_updatedatetime datetime2 null,
primary key (b_user_id, b_module_id, b_field)
);
create index ix_s_user_query_field_pref_order
on dbo.s_user_query_field_pref (b_user_id, b_module_id, b_xh, b_field);
```
说明:
- `s_user_field_pref` 的 `b_mode` 区分查看列表和可编辑列表两套个人布局;
- `s_user_query_field_pref` 不区分普通查询/高级查询模式,因为两者使用同一批查询字段;
- 查询偏好只影响普通查询收起态,展开态和高级查询仍展示所有有权限且启用的查询字段;
- 没有个人偏好时回落到对应的 `s_field_view` / `s_field_edit` / `s_field_query` 默认配置;
- “恢复默认”删除当前用户、当前模块对应的个人偏好记录。
## 5. 自动编码
```sql
create table dbo.s_autocode (
@@ -160,7 +202,7 @@ create table dbo.s_autocode (
);
```
## 5. 模块关系
## 6. 模块关系
```sql
create table dbo.s_relation (
@@ -190,7 +232,7 @@ create index ix_s_relation_target
on dbo.s_relation (b_target_module_id);
```
## 6. 菜单
## 7. 菜单
```sql
create table dbo.s_menu (
@@ -219,7 +261,9 @@ create index ix_s_menu_route
on dbo.s_menu (b_route, b_canuse, b_id);
```
## 7. 权限
## 8. 权限
> 权限直接授予用户,不引入角色继承。`s_power` 是权限点定义表,`s_user_power` 是用户授权表;数据范围使用独立的 `s_user_data_scope` 表。权限点按资源类型扩展,新增报表、页面等资源时复用同一模型。
```sql
create table dbo.s_power (
@@ -240,9 +284,54 @@ create index ix_s_power_module
create index ix_s_power_resource
on dbo.s_power (b_power_type, b_resource, b_canuse);
create table dbo.s_user_power (
b_user_id varchar(50) not null,
b_power_id varchar(50) not null,
b_canuse tinyint not null default 1,
b_updatedatetime datetime2 null,
primary key (b_user_id, b_power_id)
);
create index ix_s_user_power_user
on dbo.s_user_power (b_user_id, b_canuse, b_power_id);
create table dbo.s_user_data_scope (
b_user_id varchar(50) not null,
b_module_id varchar(50) not null,
b_operation varchar(30) not null, -- read / update / delete / export
b_scope_no int not null default 1,
b_scope_type varchar(30) not null, -- own / department / department_tree / all / custom
b_scope_field varchar(50) null, -- 业务数据中的归属用户/部门字段
b_scope_value varchar(100) null, -- custom 时每个用户/部门值一行
b_updatedatetime datetime2 null,
primary key (b_user_id, b_module_id, b_operation, b_scope_no)
);
create index ix_s_user_data_scope_module
on dbo.s_user_data_scope (b_user_id, b_module_id, b_operation, b_scope_type);
```
## 8. 多语言
权限点约定:
- `menu/access`:菜单或页面入口访问权限;
- `module/read|create|update|delete|export`:模块级数据操作权限;
- `action/execute`:菜单或页面中的按钮、动作权限;
- `field/view|edit|query|export`:字段查看、修改、查询、导出能力;
- `page/access`、`report/access`:独立页面或报表访问权限,报表列表中的每个报表可作为一个资源;
- `b_power_type` 和 `b_operation` 是可扩展编码,新增资源类型不新增权限表,但需要补充权限定义和前端/后端校验规则。
- 当前数据库迁移中的权限类型/形状约束若仍只允许 `menu/module/action/field` 或 `field/view|edit`,新增 `page`、`report`、`field/query` 等编码时必须同步扩展约束;不要只修改前端枚举。
权限计算约定:
- 默认拒绝:用户没有有效授权记录时不具备该权限;
- 用户存在有效 `s_user_power` 记录时获得该权限;停用的权限点或授权记录不生效;
- 字段 `edit` 只代表用户有修改能力,最终是否可编辑仍受 `s_field_edit.b_readonly`、`b_disabled` 和业务校验约束;
- 字段不可见时,其编辑、查询、导出能力一并无效;字段可见但无 `edit` 权限时,在可编辑列表中显示为只读;
- 模块数据操作权限与数据范围同时生效:先判断操作权限,再按 `s_user_data_scope` 限制数据行;
- 菜单/页面/报表访问权限只控制入口和访问,不能替代模块、字段或数据范围权限。
## 9. 多语言
```sql
-- b_i18n / b_key 保存完整资源键,不追加 .name 或 .title 后缀:
@@ -277,7 +366,7 @@ create index ix_s_i18n_locale
on dbo.s_i18n (b_locale, b_canuse);
```
## 9. 日志
## 10. 日志
> 日志主键由业务层统一生成 UUIDv7。UUID 主键使用非聚集索引;技术、登录、审计日志按发生时间建立聚集索引,审计字段明细按审计事件建立聚集索引。日志顺序以 `b_occurdatetime` 为准,不依赖 UUID 排序。
@@ -379,7 +468,7 @@ create index ix_s_log_audit_module
on dbo.s_log_audit (b_module_id, b_data_id, b_occurdatetime);
```
## 10. 业务表主键约定
## 11. 业务表主键约定
```sql
create table dbo.b_example (