@microi.net/cli 5.2.6 → 5.2.8
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 +59 -59
- package/scripts/microi-cli.js +52 -29
- package/scripts/microi-skills.meta.json +221 -221
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +95 -95
- package/skills/ai-engine/SKILL.md +12 -4
- package/skills/app-store/SKILL.md +41 -20
- package/skills/message-notification/SKILL.md +8 -1
- package/skills/microi-client-frontend/SKILL.md +1 -1
- package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +1 -1
- package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +2 -2
- package/skills/microi-docs-coverage/references/capability-map.md +2 -1
- package/skills/microi-form-layout/SKILL.md +6 -6
- package/skills/microi-frontend-sdk/SKILL.md +6 -6
- package/skills/microi-sso/SKILL.md +1 -1
- package/skills/microi-sso/references/acceptance.md +1 -1
- package/skills/microi-sso/references/configuration-and-security.md +1 -1
- package/skills/microi-system-delivery/SKILL.md +2 -2
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +1 -1
- package/skills/microi.v8.js +1 -1
- package/skills/system-observability/SKILL.md +25 -7
- package/skills/translate-engine/SKILL.md +3 -0
- package/skills/ui-design/SKILL.md +1 -1
- package/skills/v8-api-config/SKILL.md +31 -9
- package/skills/v8-cache-pattern/SKILL.md +304 -289
- package/skills/v8-file-upload/SKILL.md +11 -8
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +1 -1
- package/skills/v8-menu-buttons/SKILL.md +1 -1
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +1 -1
- package/skills/v8-mongodb/SKILL.md +58 -18
- package/skills/v8-mq-mqtt/SKILL.md +130 -109
- package/skills/v8-mq-mqtt/references/mqtt-production.md +3 -2
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +14 -16
- package/skills/v8-saas-multi-tenant/SKILL.md +3 -0
- package/skills/v8-security/SKILL.md +10 -6
- package/skills/v8-table-event/SKILL.md +1 -1
- package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +1 -1
- package/skills/v8-utilities/SKILL.md +1 -1
- package/skills/v8-utilities/references/platform-http-routes.md +4 -2
- package/skills/v8-utilities/references/server-api-index.md +31 -10
- package/skills/v8-workflow/SKILL.md +1 -1
- package/skills/workspace-conventions/SKILL.md +1 -1
|
@@ -9,10 +9,12 @@ description: Microi V8 安全指南。用于审查 DiyToken 与权限、可逆
|
|
|
9
9
|
|
|
10
10
|
你正在开发 Microi 吾码平台的 V8 引擎代码,必须遵守以下安全规范。
|
|
11
11
|
|
|
12
|
-
访问密钥由 `microi_list_my_access_keys`、`microi_create_my_access_key`、`microi_revoke_my_access_key` 管理,只允许当前用户、限期、最小 scope,明文仅创建时返回一次。外部身份回调固定为 `/api/ExternalLogin/Callback`,服务端校验租户、Provider、state、redirect 和回调域名,验证成功后仍签发 DiyToken。
|
|
12
|
+
访问密钥由 `microi_list_my_access_keys`、`microi_create_my_access_key`、`microi_revoke_my_access_key` 管理,只允许当前用户、限期、最小 scope,明文仅创建时返回一次。外部身份回调固定为 `/api/ExternalLogin/Callback`,服务端校验租户、Provider、state、redirect 和回调域名,验证成功后仍签发 DiyToken。
|
|
13
|
+
|
|
14
|
+
官方升级资源属于独立控制面。`get-microi-upgrade-resource` 可以匿名读取固定白名单,但 `Publish/PublishBatch` 必须调用仅绑定该 Managed ApiEngineKey 的 `V8.Method.AuthorizeOfficialResourcePublish()`:固定 `iTdos` 官方租户、拒绝访问密钥会话,并从主库复核当前用户、状态和平台管理员角色。禁止只相信 `V8.CurrentUser.Level`,也禁止把这个可信原子复用于普通接口、租户 Hook 或表单事件;资源校验、SHA 乐观锁、事务行锁、写入及回读仍由 Managed V8 编排。
|
|
13
15
|
|
|
14
16
|
<!-- microi-progressive:begin -->
|
|
15
|
-
<!-- microi-progressive:chunk id=v8-security-000 sha256=
|
|
17
|
+
<!-- microi-progressive:chunk id=v8-security-000 sha256=d03ee34e72925db55f9022de26dfc251c0d3d69fac52ae6a910d42ddfc142ae7 -->
|
|
16
18
|
## 0. 租户动态系统设置与密钥边界
|
|
17
19
|
|
|
18
20
|
第三方密钥(微信、支付宝、OpenAI、阿里云、ERP、SMTP)**禁止**硬编码在 V8 代码或前端。公开的租户配置必须建成当前租户 `sys_config` 的实体字段;敏感或仅供后端使用的租户业务配置保存到 `mci_system_setting`。数据库、Redis、MongoDB、MinIO、MQ 等部署控制面仍由主库 `sys_osclients` 托管,子租户不能修改。
|
|
@@ -33,7 +35,9 @@ var clientSecret = privateSettings['Login.Gitee.ClientSecret'];
|
|
|
33
35
|
var openaiKey = 'sk-xxxxxxxxxx';
|
|
34
36
|
```
|
|
35
37
|
|
|
36
|
-
`V8.OsClientModel` 与兼容别名 `V8.ClientModel` 均为独立脱敏副本:数据库连接、AuthSecret、Redis、对象存储、MQ、MQTT、Search 的地址与凭据不会注入脚本。存量租户业务字段只作兼容,新增 Secret 不得继续依赖 `V8.OsClientModel`。
|
|
38
|
+
`V8.OsClientModel` 与兼容别名 `V8.ClientModel` 均为独立脱敏副本:数据库连接、AuthSecret、Redis、对象存储、MQ、MQTT、Search 的地址与凭据不会注入脚本。存量租户业务字段只作兼容,新增 Secret 不得继续依赖 `V8.OsClientModel`。
|
|
39
|
+
|
|
40
|
+
接口引擎需要保存可逆的接口私有密码或 Token 时,使用 `V8.Method.ProtectApiEngineSecret(value)` 写入密文,读取时使用 `V8.Method.UnprotectApiEngineSecret(cipher)`。宿主固定绑定当前 `OsClient + ApiEngineKey`,V8 不能指定租户、Purpose 或密钥;同租户其它接口引擎也不能解密。禁止继续用 `V8.OsClientModel.AuthSecret/DbConn` 自行派生 AES 密钥。列表仍只返回脱敏元数据,解密前仍要校验当前用户、行归属和业务权限,原文不得进入日志、审计或匿名响应。
|
|
37
41
|
|
|
38
42
|
`V8.SysConfig` 按运行端采用不同权限投影,且任何运行端都不存在 `PublicSettings` 属性。浏览器/前端 V8 只得到匿名 `GetSysConfig` 的独立脱敏 `sys_config` 投影;`mci_system_setting` 的任何记录都不会进入浏览器。后端接口引擎和后端 V8 事件得到当前租户完整、独立的 `sys_config`,全部启用的 `mci_system_setting` 则放在 `V8.SysConfig.ServerPrivateSettings`,Secret 由可信后端按租户解密。独立节点避免动态 Key 覆盖 `sys_config` 实体字段,也让前后端边界可审计。子租户调用 `V8.FormEngine.GetSysConfig(...)` 时仍强制使用当前 `OsClient`,不能借缓存命中读取其它租户配置。
|
|
39
43
|
|
|
@@ -61,7 +65,7 @@ Secret 只通过租户管理员专用端点写入租户绑定的认证密文。
|
|
|
61
65
|
- 多节点保存连接使用按 `OsClient + DbKey` 隔离的分布式锁,并由数据库唯一索引兜底;同步数据和附件仍必须使用业务幂等键,锁不能替代唯一约束、状态机或 inbox/outbox。
|
|
62
66
|
|
|
63
67
|
<!-- /microi-progressive:chunk -->
|
|
64
|
-
<!-- microi-progressive:chunk id=v8-security-001 sha256=
|
|
68
|
+
<!-- microi-progressive:chunk id=v8-security-001 sha256=9e477268919238bb6a2525116de3c8386aa439d8e93c5d66f3893cb07740b374 -->
|
|
65
69
|
## 0.5 接口引擎配置安全
|
|
66
70
|
|
|
67
71
|
代码以外,接口本身的配置项也是安全防线(详见 `v8-api-config/SKILL.md`):
|
|
@@ -75,7 +79,7 @@ Secret 只通过租户管理员专用端点写入租户绑定的认证密文。
|
|
|
75
79
|
| `LogParam = true` | 支付/审计类接口记录请求 |
|
|
76
80
|
|
|
77
81
|
<!-- /microi-progressive:chunk -->
|
|
78
|
-
<!-- microi-progressive:chunk id=v8-security-002 sha256=
|
|
82
|
+
<!-- microi-progressive:chunk id=v8-security-002 sha256=7229e5f8d200c0dfbab08752405f5e88d7edc80e9e92b6802880c022b09ca893 -->
|
|
79
83
|
## 1. 防 SQL 注入
|
|
80
84
|
|
|
81
85
|
### 必须:参数化查询
|
|
@@ -147,7 +151,7 @@ if (isNaN(amount) || amount <= 0 || amount > 999999.99) {
|
|
|
147
151
|
```
|
|
148
152
|
|
|
149
153
|
<!-- /microi-progressive:chunk -->
|
|
150
|
-
<!-- microi-progressive:chunk id=v8-security-004 sha256=
|
|
154
|
+
<!-- microi-progressive:chunk id=v8-security-004 sha256=1703ea824e4807b24d30225d41e16fb36b0fecc21c63a4ab0296106185460a27 -->
|
|
151
155
|
## 4. 防 XSS
|
|
152
156
|
|
|
153
157
|
四个字符替换不是通用 XSS 防护。必须按输出上下文处理:
|
|
@@ -51,7 +51,7 @@ AI 本地开发表单 V8 事件时,优先修改 `microi-v8-engine/<租户>/<
|
|
|
51
51
|
| `DataFilterV8.js` | **后端** | `DataFilter` | 获取列表/表单数据后 | 每行数据加工、脱敏、补充字段 |
|
|
52
52
|
|
|
53
53
|
<!-- /microi-progressive:chunk -->
|
|
54
|
-
<!-- microi-progressive:chunk id=v8-table-event-002 sha256=
|
|
54
|
+
<!-- microi-progressive:chunk id=v8-table-event-002 sha256=86c13bfd4dbc035e5498fe072ed176780ed31975b64eda09c1a378de986ab73d -->
|
|
55
55
|
## 事件触发规则
|
|
56
56
|
|
|
57
57
|
- 后端 V8 事件 / 接口引擎中调用 `V8.FormEngine` 增删改 → **不触发**表单 V8 事件
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
| `WFNodeEnd` | 流程节点结束 V8 事件 |
|
|
26
26
|
|
|
27
27
|
<!-- /microi-progressive:chunk -->
|
|
28
|
-
<!-- microi-progressive:chunk id=v8-table-event-012 sha256=
|
|
28
|
+
<!-- microi-progressive:chunk id=v8-table-event-012 sha256=db5bf410bc6babf14d3d91cc61b9875c81bc1be24b2c1b7c62334bc6819e4e55 -->
|
|
29
29
|
## 注意事项
|
|
30
30
|
|
|
31
31
|
- 前端事件可使用 `window` 对象和 `async/await`,后端事件不可以
|
|
@@ -71,7 +71,7 @@ var clientDecoded = V8.Base64.decode(clientEncoded);
|
|
|
71
71
|
| Excel/Word/PPT/邮件 | `v8-export-import` |
|
|
72
72
|
| 前端事件/打印/扫码 | `v8-frontend-events` |
|
|
73
73
|
| 后端表单事件 | `v8-table-event` |
|
|
74
|
-
|
|
|
74
|
+
| 接口配置/流式响应/异步/后台任务 | `v8-api-config` |
|
|
75
75
|
|
|
76
76
|
## 不可越过的边界
|
|
77
77
|
|
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
| 路由 | 用途 |
|
|
10
10
|
|---|---|
|
|
11
11
|
| `POST /apiengine/{ApiEngineKey}` | 推荐的稳定接口引擎入口 |
|
|
12
|
-
| `POST /api/ApiEngine/Run` |
|
|
12
|
+
| `POST /api/ApiEngine/Run` | 仅旧客户端兼容,Body 传 `ApiEngineKey`;新增固定业务禁止使用 |
|
|
13
13
|
| `/apiengine/{ApiEngineKey}--OsClient--{OsClient}--` | 仅用于确实无法设置 Header/Form/Query 的 GET/HEAD 场景 |
|
|
14
14
|
|
|
15
15
|
普通请求优先在唯一 `osclient` Header 传租户,也可在 Query/Form/JSON 中冗余;
|
|
16
|
+
固定业务必须使用真实引擎动态地址或唯一 `ApiAddress`,使日志、流量、审计和限流
|
|
17
|
+
直接按引擎归因;旧通用入口只能由显式 `RunLegacy` 调用。
|
|
16
18
|
不要无脑把特殊租户后缀加到每条 URL。官网中的
|
|
17
19
|
`/apiengine/test1`、`/apiengine/get-product-list`、打印、支付和 Excel demo
|
|
18
20
|
都是业务 `ApiEngineKey` 示例,不是固定平台接口。
|
|
@@ -49,7 +51,7 @@
|
|
|
49
51
|
| `POST /api/HDFS/GetPrivateFileUrl` | 获取当前租户短期私有文件地址 |
|
|
50
52
|
| `GET /api/HDFS/OpenPrivateFile` | 受权打开私有文件/Office 代理 |
|
|
51
53
|
| `POST /api/DiyChat/SendSystemMessage` | 发送站内消息;前端优先 `V8.SendSystemMessage` |
|
|
52
|
-
| `POST /
|
|
54
|
+
| `POST /apiengine/platform-mq` | MQ 管理入口;Body 使用 `Action=Send`,仅当前租户超级管理员 |
|
|
53
55
|
| `GET /api/Diagnostics/health` | 聚合健康状态 |
|
|
54
56
|
| `GET /api/Diagnostics/liveness` | 进程存活检查,不代表已就绪接流量 |
|
|
55
57
|
|
|
@@ -18,21 +18,24 @@
|
|
|
18
18
|
| `V8.RowIndex`、`V8.CacheData`、`V8.NotSaveField` | DataFilter 等事件上下文 |
|
|
19
19
|
| `V8.LineValue`、`V8.NextNodeId`、`V8.WF` | 工作流路线与节点上下文 |
|
|
20
20
|
| `V8.FilesByteBase64` | 上传文件 Base64 字典 |
|
|
21
|
-
| `V8.Limits` | 当前 Jint 资源预算与调用深度 |
|
|
21
|
+
| `V8.Limits` | 当前 Jint 资源预算与调用深度 |
|
|
22
|
+
| `V8.Stream` | 仅 `ResponseType=Stream` 的接口引擎可用;SSE/NDJSON 暂态分片写入器 |
|
|
22
23
|
| `V8.Action` | 服务器全局 V8 自定义方法 |
|
|
23
24
|
|
|
24
25
|
## 调用、数据与异步
|
|
25
26
|
|
|
26
27
|
| API | 说明 |
|
|
27
28
|
|---|---|
|
|
28
|
-
| `V8.ApiEngine.Run(...)` | 同步调用接口引擎 |
|
|
29
|
-
| `await V8.ApiEngine.RunAsync(...)` | 请求内异步调用接口引擎 |
|
|
29
|
+
| `V8.ApiEngine.Run(...)` | 同步调用接口引擎 |
|
|
30
|
+
| `await V8.ApiEngine.RunAsync(...)` | 请求内异步调用接口引擎 |
|
|
31
|
+
| `V8.Stream.Write(data,eventName?,id?)` | 同步写一个受大小限制的暂态流式分片 |
|
|
32
|
+
| `await V8.Stream.WriteAsync(data,eventName?,id?)` | 等待网络背压后写暂态分片;每次检查返回 `Code` |
|
|
30
33
|
| `V8.FormEngine.*` | 表单 CRUD,见 `v8-crud-api` |
|
|
31
34
|
| `await V8.FormEngine.GetTableDataAsync(...)` | 请求内异步查列表 |
|
|
32
35
|
| `V8.Db`、`V8.DbRead`、`V8.DbTrans` | 主库、只读库、共享事务 |
|
|
33
36
|
| `V8.DbTrans.FromSql(sql)` | 在平台提供的共享事务内执行参数化 SQL |
|
|
34
37
|
| `V8.Dbs`、`V8.Dbs.Open(...)` | 已配置的扩展数据库 |
|
|
35
|
-
| `V8.MongoDb.*` | MongoDB CRUD |
|
|
38
|
+
| `V8.MongoDb.*` | MongoDB CRUD;`UptFormDataByWhere` / `DelFormDataByWhere` 强制参数化非空 `_Where`,禁止更新 `_id`,绑定当前 V8 租户,且不参与 `V8.DbTrans` |
|
|
36
39
|
| `V8.DataSourceEngine` | 当前租户数据源引擎对象 |
|
|
37
40
|
| `V8.DataSourceEngine.Run(...)`、`V8.DataSourceEngine.RunAsync(...)` | 同步/请求内异步运行数据源 |
|
|
38
41
|
| `V8.ModuleEngine` | 后端模块模型能力;不能绕过用户模块权限 |
|
|
@@ -48,19 +51,37 @@
|
|
|
48
51
|
| `V8.Method.NewGuid()`、`V8.Method.NewUlid()` | 生成标识 |
|
|
49
52
|
| `V8.Method.GetTimestamp()` | Unix 秒时间戳 |
|
|
50
53
|
| `V8.Method.GetCurrentToken(token,osClient)` | 读取当前 Token 对象;不透传前端 |
|
|
51
|
-
| `V8.Method.RefreshLoginUser(userId,osClient)` |
|
|
54
|
+
| `V8.Method.RefreshLoginUser(userId,osClient?,token?)` | 刷新登录投影;租户取当前 V8/已认证 DiyToken(可信宿主须建立用户+租户作用域),显式 OsClient 仅作一致性断言;普通用户仅本人,同租户超级管理员主库复核后可跨用户。第三参仅兼容历史 `microi-init` 的原始 Token,宿主重新验证且只允许 Token 本人;返回对象、访问密钥、空身份和跨租户均拒绝 |
|
|
52
55
|
| `V8.Method.ClearUserLoginInfo(userId,osClient)` | 管理员吊销用户全部终端 Token |
|
|
53
56
|
| `V8.Method.GetDirectTableGrantPolicies()` | 读取平台表直连授权策略;仅供可信角色表单事件做最终校验 |
|
|
54
57
|
| `V8.Method.ConsumeIdentityVerificationTicket({Ticket,Purpose,ActionHash})` | 按当前 DiyToken 用户、租户、用途和操作摘要原子消费一次性 Passkey/TOTP/人脸票据 |
|
|
55
|
-
| `V8.Method.GetPrivateFileUrl({FilePathName})` | 签发当前租户短期私有文件代理地址 |
|
|
56
|
-
| `V8.Method.
|
|
57
|
-
| `V8.Method.
|
|
58
|
+
| `V8.Method.GetPrivateFileUrl({FilePathName})` | 签发当前租户短期私有文件代理地址 |
|
|
59
|
+
| `V8.Method.ResolveOsClientByDomain(domain)` | 仅允许官方 `platform-os-client-by-domain` 调用;返回最小 OsClient 投影 |
|
|
60
|
+
| `V8.Method.GetPublicSysConfig(lang?)` | 仅允许官方 `platform-sys-config` 调用;返回浏览器安全系统设置投影 |
|
|
61
|
+
| `V8.Method.GetLangBundle(lang?,prefix?)` | 仅允许官方 `platform-lang-bundle` 调用;读取当前租户词条包 |
|
|
62
|
+
| `V8.Method.GetLoginWallpapers()` | 仅允许官方 `platform-login-wallpapers` 调用;固定读取当前租户最多 200 条启用壁纸的 `Id/Name/Category/ImgUrl`,不开放通用匿名表权限 |
|
|
63
|
+
| `V8.Method.GetLegacyInitMenuTree(rawToken, osClient?)` | 仅允许官方 `microi-init` 调用;重新验证请求体原始 DiyToken、拒绝访问密钥与跨租户请求,并按当前角色返回权威菜单树 |
|
|
64
|
+
| `V8.Method.GetAuthorizedPrivateFileUrl(options)` | 仅允许官方 `platform-private-file-url` 调用;重算菜单、行、字段与文件引用授权 |
|
|
65
|
+
| `V8.Method.AuthorizeCurrentUserTenantProvisioning()` | 仅允许官方 `platform-create-tenant` 在 Before Hook 前校验主租户普通登录会话 |
|
|
66
|
+
| `V8.Method.ProvisionCurrentUserTenant(options)` | 仅允许官方 `platform-create-tenant` 调用;所有者、手机号、姓名和密码材料从可信当前用户派生 |
|
|
67
|
+
| `V8.Method.PrepareCurrentUserProfileUpdate(options)` | 仅允许官方 `platform-user-update-profile` 调用;固定当前用户并规范当前租户头像路径 |
|
|
68
|
+
| `V8.Method.ManageSysUserAdmin(options)` | 仅允许官方 `platform-sys-user-admin` 调用;固定身份与租户并执行表权限、角色层级、改密 step-up、内容安全及会话安全边界;授权预检返回规范化 `DataAppend.ChangesPassword` |
|
|
69
|
+
| `V8.Method.AuthorizeOfficialResourcePublish()` | 仅允许官方 `get-microi-upgrade-resource` 的发布分支调用;固定 `iTdos`、拒绝访问密钥并从主库复核平台管理员;不是通用授权 API |
|
|
70
|
+
| `V8.Method.ValidateTenantSystemSettingsOperation(options)` | 仅允许官方 `platform-tenant-system-settings` 调用;拒绝访问密钥、非管理员、Secret/Sensitive Key 和已迁移公开 Key |
|
|
71
|
+
| `V8.Method.GetTenantSystemSettingsSecurityProjection()` | 仅允许官方 `platform-tenant-system-settings` 调用;只返回 Secret 是否已配置与迁移 Key,不返回值或密文 |
|
|
72
|
+
| `V8.Method.Upload(options)` | 受配额限制的上传 |
|
|
73
|
+
| `V8.Method.UploadText(options)` | 直接上传当前租户 UTF-8 文本,避免 Base64 膨胀;仍执行安全文件名、扩展名、HDFS、配额与 256 MB 文本上限 |
|
|
74
|
+
| `V8.Method.AddSysLog(options)` | 结构化系统日志 |
|
|
58
75
|
| `V8.Method.ParseWhere(where)` | 兼容旧 Where 转换 |
|
|
59
76
|
| `V8.Method.UpdateBackgroundTask(options)` | 上报已提交单位的后台任务进度 |
|
|
60
77
|
| `V8.Method.RefreshExtensionDatabases(osClient?)` | 配置表提交后刷新全节点 `V8.Dbs` |
|
|
61
78
|
|
|
62
|
-
管理员维护、备份、清库、缓存连接管理等低层方法即使可见,也不能暴露为普通
|
|
63
|
-
或匿名业务 API。
|
|
79
|
+
管理员维护、备份、清库、缓存连接管理等低层方法即使可见,也不能暴露为普通
|
|
80
|
+
或匿名业务 API。
|
|
81
|
+
|
|
82
|
+
以上启动、文件、系统账号和租户设置 `platform-*` 原子都是固定 Managed 接口的可信宿主边界,不是普通业务脚本可复用的快捷方法。官网客户端调用对应 `/apiengine/platform-*` 路由;旧 Controller 只保留旧版本兼容。登录壁纸原子不要求 `diy_wallpaper.IsAnonymousRead=1`,也不允许租户 Hook 参与匿名请求。租户个性化逻辑写入应用声明的 `CreateIfMissing` Hook,禁止直接修改会被官方安装或更新恢复的 Managed 接口。密码、DiyToken、Secret 保存和 Reveal 仍属于 C# 可信边界。
|
|
83
|
+
|
|
84
|
+
旧客户端兼容路由 `/api/SysUser/UpdateMyDefaultIndexUrl`、`/api/SysUser/UpdateCurrentProfile` 和 `/api/TenantSystemSettings/List` 只固定转发上述 Managed 接口;新客户端不得继续以 Controller 作为业务事实源。
|
|
64
85
|
|
|
65
86
|
## Base64 与加密
|
|
66
87
|
|
|
@@ -152,7 +152,7 @@ if (V8.Form.Money <= 100) {
|
|
|
152
152
|
```
|
|
153
153
|
|
|
154
154
|
<!-- /microi-progressive:chunk -->
|
|
155
|
-
<!-- microi-progressive:chunk id=v8-workflow-006 sha256=
|
|
155
|
+
<!-- microi-progressive:chunk id=v8-workflow-006 sha256=8e2a82330c7f49c3a03920123531d310ea329fd310179918d835e3c05d49771a -->
|
|
156
156
|
## 前端发起流程
|
|
157
157
|
|
|
158
158
|
```javascript
|
|
@@ -104,7 +104,7 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
|
|
|
104
104
|
**2026-06 强制补充**:AI 不得在任何子项目目录下放置一次性日志、自动化截图、接口回收文件或调试脚本。像 `Microi.Server/Microi.net.Api/.tmp-*.log`、`Microi.Client/*.png` 这类文件一律视为规范失败,必须移到 `<workspace-root>/.tmp/` 或 `<workspace-root>/.tmp/screenshots/`。正式 Playwright 工程由 Microi.VSCode 插件生成时可以继续使用 `.microi-e2e/`,但 AI 为某个任务手写的一次性 Playwright 脚本、报告和截图仍然必须放在 `.tmp/`。
|
|
105
105
|
|
|
106
106
|
<!-- /microi-progressive:chunk -->
|
|
107
|
-
<!-- microi-progressive:chunk id=workspace-conventions-005 sha256=
|
|
107
|
+
<!-- microi-progressive:chunk id=workspace-conventions-005 sha256=52273704562fac1245fa364ca811949ccb2685dce8375f99bdc4029a314dd758 -->
|
|
108
108
|
## Microi 源码路径速查(工作区根相对路径)
|
|
109
109
|
|
|
110
110
|
当用户提到“吾码后端源码”“吾码前端源码”“表单引擎源码”“官网源码”等简称时,默认按下列路径定位;如果当前工作区缺少对应目录,再用 `rg --files` 或目录搜索确认实际位置。
|