20260922172938

This commit is contained in:
oneao committed 2026-09-22 17:29:39 +08:00
1 parent 583984c24f
commit c8dad8d4a6
46 files changed
+3366 -1246

No files matched your search

@@ -40,6 +40,7 @@
- 启用和停用统一使用 `b_canuse`,取值为 `0/1`。
- 排序字段统一使用 `b_xh`,默认值为 `0`;需要稳定排序时增加业务主键作为次排序字段。
- 最后修改时间统一使用 `b_updated_at`、修改人使用 `b_updated_by`(均为 `datetime2` / `varchar`,可空);不建触发器,由写入方维护。
- 名称、备注和多语言文本使用 `nvarchar`;编码、状态、类型和 SQL 标识类字段使用 `varchar`。
- 日期时间优先使用 `datetime2`;金额、数量等数值字段根据业务精度明确设置 `precision` 和 `scale`。
- 是否允许为空及默认值应根据业务语义明确设置,不能无理由全部允许为空或全部设置默认值。
@@ -191,12 +192,14 @@ create table dbo.s_module (
b_view_table varchar(128) null, -- 默认查询表或视图
b_save_table varchar(128) null, -- 默认保存目标表
b_key_field varchar(50) null, -- 主键字段
b_scope_field varchar(50) null, -- 数据范围字段(记录归属人字段,如 b_inputuser_id)
b_order_sql varchar(500) null, -- 默认排序 SQL
b_query_sql nvarchar(max) null, -- 可选查询 SQL 或 SQL 模板
b_config_json nvarchar(max) null, -- 低频模块扩展配置
b_canuse tinyint not null default 1, -- 是否启用(0/1)
b_xh int not null default 0, -- 同级显示顺序
b_bz nvarchar(2000) null -- 备注
b_bz nvarchar(2000) null, -- 备注
b_updated_at datetime2 null -- 最后保存时间(本模块任意配置保存时刷新,含字段 / 界面配置等子表)
);
create index ix_s_module_parent
@@ -253,6 +256,7 @@ create index ix_s_module_save_table
- 数据之间的主子表、引用和多对多关系统一由 `s_relation` 表达。
- 多对多的中间表模块(`data` 模块)在模块树中统一挂在所属业务域 `module` 节点下,与参与多对多的主表模块平级;不挂在任一参与多对多的主表模块下——模块树只表达业务组织,不表达数据关系,混入会污染 `b_path` 子树查询、菜单挂载与权限继承。
- 模块级扩展配置使用 `b_config_json`,只保存低频、非核心的扩展属性,不重复保存字段定义、权限或界面布局。
- `b_scope_field` 是本模块的数据范围字段(记录归属人字段,如 `b_inputuser_id`),只对 `data` / `virtual` 有意义,取值必须来自 `s_field`;它是数据范围判定的唯一字段来源,配在模块上而不是配在用户授权行上——同一个模块的所有用户必须用同一字段判范围。`self` 直接比该字段,`dept` / `dept_tree` 由当前用户反查 `b_user.b_dept_id` 得到部门再来比(见 §14.4);为空表示该模块不按字段判范围。
### 4.4 查询来源优先级
@@ -991,7 +995,8 @@ b_condition_sql = 'b_salesman_id = {userId}'
### 14.6 与模块、菜单和关系的关系
- `s_power` 中的 `menu.*` 对应 `s_menu`,`module.*` 对应 `s_module`,`action.*` 对应业务动作;权限点编码与对象编码的对应关系由业务层维护,不建立外键;
- `s_user_field_power.b_module_id`、`s_user_data_power.b_module_id` 指向 `s_module.b_id`,字段还需在 `s_field` 中存在;
- 授权行只能引用存在的权限点:删 `s_power` 行时用 `dependent_deletes` 声明(`{table:'s_user_power', key_field:'b_power_id', source_field:'b_id'}`),保存层在同一事务里按同一组条件查出权限编码并连带删除授权行,调用方不需要先查编码(《FMS删除策略重构设计》§6.2);
- `s_user_field_power.b_module_id`、`s_user_data_power.b_module_id` 指向 `s_module.b_id`,字段还需在 `s_field` 中存在;删除模块时随模块一起删除 `s_user_field_power`、`s_user_data_power` 行,删除字段定义时删除该字段的 `s_user_field_power` 行;
- 数据范围只作用于本表的 `b_user_id + b_module_id + b_operation`;是否向关联模块延伸(例如子表、明细模块)由权限引擎根据业务语义决定,不依赖 `s_relation` 自动传播;
- 权限缓存、批量校验和 SQL 条件注入点由权限引擎实现,业务 SQL 生成时统一追加范围条件。