@microi.net/cli 5.6.4 → 5.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +5 -5
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +1 -1
- package/scripts/microi-cli.js +11 -11
- package/scripts/microi-skills.meta.json +196 -196
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +17 -17
- package/skills/microi-client-frontend/SKILL.md +12 -4
- package/skills/microi-deployment/SKILL.md +11 -0
- package/skills/v8-security/SKILL.md +2 -2
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +5 -4
|
@@ -14,7 +14,7 @@ description: Microi V8 安全指南。用于审查 DiyToken 与权限、可逆
|
|
|
14
14
|
官方升级资源属于独立控制面。`get-microi-upgrade-resource` 可以匿名读取固定白名单,但 `Publish/PublishBatch` 必须调用仅绑定该 Managed ApiEngineKey 的 `V8.Method.AuthorizeOfficialResourcePublish()`:固定 `iTdos` 官方租户、拒绝访问密钥会话,并从主库复核当前用户、状态和平台管理员角色。禁止只相信 `V8.CurrentUser.Level`,也禁止把这个可信原子复用于普通接口、租户 Hook 或表单事件;资源校验、SHA 乐观锁、事务行锁、写入及回读仍由 Managed V8 编排。
|
|
15
15
|
|
|
16
16
|
<!-- microi-progressive:begin -->
|
|
17
|
-
<!-- microi-progressive:chunk id=v8-security-000 sha256=
|
|
17
|
+
<!-- microi-progressive:chunk id=v8-security-000 sha256=2e81552d91b61d9d7f96cba1502306e186f0a288d5db8d443c4e524fce748bc9 -->
|
|
18
18
|
## 0. 租户动态系统设置与密钥边界
|
|
19
19
|
|
|
20
20
|
**AI 默认处理路径:** 用户交付第三方 Secret 并授权配置时,优先调用 `microi_manage_server_private_secret`:List 只确认 Key/HasSecret;Save 使用 `confirmExecution=SAVE:<ConfigKey>`,固定 `IsSecret=true / IsPublic=false` 并自动脱敏回读。例如畅捷通使用 `Integration.Changjet.AppSecret`,后端从 `V8.SysConfig.ServerPrivateSettings` 使用。不要仅拒绝硬编码后停止,也不要因为 `OsClientModel` 不暴露密钥而误判服务端 V8 无法调用第三方。工具不提供原文揭示;更换已有 Key 前回读现状,超时只回读、不盲目重写。
|
|
@@ -67,7 +67,7 @@ Secret 只通过租户管理员专用端点写入租户绑定的认证密文。
|
|
|
67
67
|
- 多节点保存连接使用按 `OsClient + DbKey` 隔离的分布式锁,并由数据库唯一索引兜底;同步数据和附件仍必须使用业务幂等键,锁不能替代唯一约束、状态机或 inbox/outbox。
|
|
68
68
|
|
|
69
69
|
<!-- /microi-progressive:chunk -->
|
|
70
|
-
<!-- microi-progressive:chunk id=v8-security-001 sha256=
|
|
70
|
+
<!-- microi-progressive:chunk id=v8-security-001 sha256=ccec93b880295123923b2375dbc616c5ab02aaf43af9a79f26b7ac953609866d -->
|
|
71
71
|
## 0.5 接口引擎配置安全
|
|
72
72
|
|
|
73
73
|
代码以外,接口本身的配置项也是安全防线(详见 `v8-api-config/SKILL.md`):
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=v8-security-005 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=v8-security-005 sha256=0a0f4864a315285b0ed3824e31d1f62d83077a389628f4eae6a0b3550ca50237 -->
|
|
6
6
|
## 2. 权限校验
|
|
7
7
|
|
|
8
8
|
### DiyToken 是平台会话与权限入口,不替换为 ASP.NET Identity
|
|
@@ -29,7 +29,8 @@ DiyToken 与 `sys_user`、`OsClient`、终端 `did`、共享 Redis 登录态、
|
|
|
29
29
|
- 菜单 `SqlWhere`、`SqlJoin` / `JoinTables` 数据范围必须在服务端形成的**真实列表、计数和导出查询**中执行,不能只用于界面展示或查询后过滤。单行详情只校验同表菜单访问权,不应用这些模块列表过滤;它们也不是行级写权限。
|
|
30
30
|
- 主表新增、修改、删除分别由当前角色的 `Add`、`Edit`、`Del` 权限控制;不得把查询 SqlWhere 追加到写入 SQL,也不得因为查询包含跨表 Join 拒绝已获授权的写入。需要“仅可修改本人数据”等业务限制时,在 `SubmitBeforeServerV8` 或专用接口引擎中以可信服务器代码校验,并统一写入 `TenantId`、负责人、创建人等归属字段。
|
|
31
31
|
- 导入、导出必须携带真实菜单上下文,并分别拥有 `Import`、`Export`;不能用 Table 级直接授权绕过。
|
|
32
|
-
- 平台表必须按后端 `PlatformResourceSecurity`
|
|
32
|
+
- 平台表必须按后端 `PlatformResourceSecurity` 分级:角色/权限、SaaS 配置、接口引擎、任务、数据源、密钥和基础设施等管理员专用表,对 `Level < 9999` 的通用客户端 FormEngine 全操作硬拒绝;`diy_table/diy_field`、工作流、微服务/商店、蓝图和微应用运行元数据只允许显式授权后的 `Read/List`,增删改及导入导出仍硬拒绝;`mic_page/mic_print/sys_user` 按真实菜单或 Table 的 `Read/Add/Edit/Del` 权限管理,账号管理另外执行层级校验和密码脱敏。
|
|
33
|
+
- 需要角色查询表/字段目录时,在 `/#/system/role` 的【表直连权限】选择 `diy_table/diy_field` 并仅授予【查】,不必强制改用接口引擎。授权包含配置与事件源码,仅授予可信角色;选列参数不构成字段权限,需限制返回字段时仍用固定投影的接口引擎。此策略由后端发布,前端读取 `GetDirectTableGrantPolicies`,不维护第二份表名白名单;不得自动给存量角色补授权。
|
|
33
34
|
- 匿名读取/新增仅适用于 `diy_table` 明确开启匿名能力的普通业务表;上述三类平台表必须先于匿名开关拒绝。
|
|
34
35
|
- 角色增删改接口不能只相信 Token 缓存或前端禁用状态,必须覆盖请求中的 `_CurrentUser/OsClient`,并从租户主库复核活动用户、数据库 Level 与有效角色 Level。角色降级要先同步受影响用户 Level,再提升共享授权 `epoch`,避免旧令牌窗口;Postman 伪造 `_IsAdmin/Level/RoleIds` 必须失败。
|
|
35
36
|
- 权限 JSON、角色 Id 或菜单上下文解析失败时必须失败关闭;角色 Id 使用精确集合匹配,禁止 `Contains` 子串判断。
|
|
@@ -103,7 +104,7 @@ var result = V8.FormEngine.GetTableData('Order', {
|
|
|
103
104
|
```
|
|
104
105
|
|
|
105
106
|
<!-- /microi-progressive:chunk -->
|
|
106
|
-
<!-- microi-progressive:chunk id=v8-security-006 sha256=
|
|
107
|
+
<!-- microi-progressive:chunk id=v8-security-006 sha256=3a40db54a44c9c76bd3dd7255d1a6b15dcf8b8b90c2d032b7eda80532f023d7d -->
|
|
107
108
|
## 5. 防重复提交
|
|
108
109
|
|
|
109
110
|
前端禁用按钮或普通 Cache 的 `Exists → Set` 只能改善体验,不能保证业务只执行一次。写操作必须接收稳定幂等键,并通过数据库唯一约束、条件更新或状态机原子落库;接口引擎可再配置 `LockKey` 降低并发,但锁不能代替业务幂等。
|
|
@@ -125,7 +126,7 @@ if (old.Code === 1 && old.Data) {
|
|
|
125
126
|
```
|
|
126
127
|
|
|
127
128
|
<!-- /microi-progressive:chunk -->
|
|
128
|
-
<!-- microi-progressive:chunk id=v8-security-007 sha256=
|
|
129
|
+
<!-- microi-progressive:chunk id=v8-security-007 sha256=35706b9a254fb5788b64535947261f66fd8c06e17103b2169f8be02fce05fa65 -->
|
|
129
130
|
## 6. 敏感数据
|
|
130
131
|
|
|
131
132
|
### 密码与认证
|