zero-ai 1.0.82 → 1.0.84
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/.r2mo/task/2026-03-05/2026-03-05.10-21-33-TASK@ai ex-api /345/221/275/344/273/244/346/225/264/346/224/271.md" +38 -0
- package/.r2mo/task/2026-03-05/2026-03-05.11-08-44-TASK@ai ex-api BUG.md +29 -0
- package/.r2mo/task/task-001.md +308 -2
- package/ExCommand.md +674 -0
- package/package.json +1 -1
- package/src/commander/ex-menu.json +6 -0
- package/src/commander-ai/fn.ex.api.js +194 -96
- package/src/commander-ai/fn.ex.menu.js +259 -0
- package/src/commander-ai/fn.source.front.js +8 -0
- package/src/commander-ai/fn.source.sync.js +1 -0
- package/src/commander-ai/index.js +2 -0
package/ExCommand.md
ADDED
|
@@ -0,0 +1,674 @@
|
|
|
1
|
+
# ai ex- 命令详细文档
|
|
2
|
+
|
|
3
|
+
本文档描述 `ai ex-` 系列命令的详细用法,包括输入数据格式和执行流程。
|
|
4
|
+
|
|
5
|
+
## 目录
|
|
6
|
+
|
|
7
|
+
- [ai ex-api](#ai-ex-api) - 从 YAML 元数据生成 RBAC Excel(资源/权限授权)
|
|
8
|
+
- [ai ex-crud](#ai-ex-crud) - 从 YAML 元数据生成 CRUD Excel(增删改查权限)
|
|
9
|
+
- [ai ex-perm](#ai-ex-perm) - 按参考角色复制权限到指定角色
|
|
10
|
+
- [ai ex-app](#ai-ex-app) - 清理缓存目录中不存在于数据库的应用实例
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## ai ex-api
|
|
15
|
+
|
|
16
|
+
### 功能说明
|
|
17
|
+
|
|
18
|
+
从 `.r2mo/task/command/ex-api` 目录加载多份 YAML 配置文件(metadata.r),多选后执行 RBAC 授权(写入数据库 + 生成 Excel),处理成功后将配置文件移至 `backup` 目录并加 `.bak` 后缀。
|
|
19
|
+
|
|
20
|
+
### 命令格式
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
ai ex-api [选项]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 选项
|
|
27
|
+
|
|
28
|
+
| 选项 | 别名 | 类型 | 默认值 | 说明 |
|
|
29
|
+
|------|------|------|--------|------|
|
|
30
|
+
| `--skip` | `-s` | boolean | false | 仅生成 Excel,跳过去重等检查 |
|
|
31
|
+
|
|
32
|
+
### 前置条件
|
|
33
|
+
|
|
34
|
+
#### 环境变量(数据库)
|
|
35
|
+
|
|
36
|
+
必须设置以下环境变量(可在 `.r2mo/app.env` 中 export):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
export Z_DB_TYPE="MYSQL" # 数据库类型
|
|
40
|
+
export Z_DB_HOST="127.0.0.1" # 数据库主机
|
|
41
|
+
export Z_DB_PORT="3306" # 数据库端口
|
|
42
|
+
export Z_DBS_INSTANCE="your_db" # 业务数据库实例名
|
|
43
|
+
export Z_DB_APP_USER="username" # 数据库用户
|
|
44
|
+
export Z_DB_APP_PASS="password" # 数据库密码
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
#### 环境变量(应用)
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
export Z_APP_ID="app-uuid" # 应用 ID
|
|
51
|
+
export Z_TENANT="tenant-id" # 租户标识
|
|
52
|
+
export Z_SIGMA="sigma-key" # Sigma 维度键
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 配置文件位置
|
|
56
|
+
|
|
57
|
+
命令会在以下位置查找配置目录(按优先级):
|
|
58
|
+
|
|
59
|
+
1. `当前目录/.r2mo/task/command/ex-api`
|
|
60
|
+
2. `上级目录/.r2mo/task/command/ex-api`
|
|
61
|
+
3. `上上级目录/.r2mo/task/command/ex-api`
|
|
62
|
+
|
|
63
|
+
### YAML 配置格式
|
|
64
|
+
|
|
65
|
+
在 `.r2mo/task/command/ex-api` 目录下创建 YAML 文件(可多个),格式如下:
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
# 示例:user-management.yaml
|
|
69
|
+
metadata:
|
|
70
|
+
# 资源定义
|
|
71
|
+
resources:
|
|
72
|
+
- identifier: "user.list" # 资源标识符(唯一)
|
|
73
|
+
name: "用户列表" # 资源名称
|
|
74
|
+
type: "resource.ambient" # 资源类型
|
|
75
|
+
uri: "/api/users" # API 路径
|
|
76
|
+
method: "GET" # HTTP 方法
|
|
77
|
+
|
|
78
|
+
- identifier: "user.create"
|
|
79
|
+
name: "创建用户"
|
|
80
|
+
type: "resource.ambient"
|
|
81
|
+
uri: "/api/users"
|
|
82
|
+
method: "POST"
|
|
83
|
+
|
|
84
|
+
# 权限集定义(可选)
|
|
85
|
+
permissionSets:
|
|
86
|
+
- code: "USER_ADMIN" # 权限集代码
|
|
87
|
+
name: "用户管理员" # 权限集名称
|
|
88
|
+
permissions: # 包含的权限
|
|
89
|
+
- "user.list"
|
|
90
|
+
- "user.create"
|
|
91
|
+
- "user.update"
|
|
92
|
+
- "user.delete"
|
|
93
|
+
|
|
94
|
+
# target 配置(可选,用于模块化项目)
|
|
95
|
+
target:
|
|
96
|
+
root: "ZERO_MODULE" # 环境变量名
|
|
97
|
+
module: "ambient" # 模块名(会查找 zero-exmodule-{module})
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 执行流程
|
|
101
|
+
|
|
102
|
+
1. **扫描配置文件**:从配置目录加载所有 `.yaml` / `.yml` 文件
|
|
103
|
+
2. **用户选择**:通过交互式界面多选要执行的配置
|
|
104
|
+
3. **环境检查**:验证数据库和应用环境变量是否齐全
|
|
105
|
+
4. **连接数据库**:建立数据库连接
|
|
106
|
+
5. **写入 RBAC 表**:
|
|
107
|
+
- `S_RESOURCE`:资源表
|
|
108
|
+
- `S_ACTION`:操作表
|
|
109
|
+
- `S_PERMISSION`:权限表
|
|
110
|
+
- `S_PERM_SET`:权限集表(如果定义)
|
|
111
|
+
6. **生成 Excel**:
|
|
112
|
+
- 输出到 `plugins/{pluginId}/security/RBAC_RESOURCE/`
|
|
113
|
+
- 使用模板 `src/_template/EXCEL/ex-api/template-RBAC_RESOURCE.xlsx`
|
|
114
|
+
7. **备份配置**:将处理成功的 YAML 文件移至 `backup/` 并加 `.bak` 后缀
|
|
115
|
+
|
|
116
|
+
### 输出位置
|
|
117
|
+
|
|
118
|
+
#### 标准项目(ONE 架构)
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
项目根目录/
|
|
122
|
+
└── src/main/resources/plugins/
|
|
123
|
+
└── zero-launcher-configuration/
|
|
124
|
+
└── security/
|
|
125
|
+
└── RBAC_RESOURCE/
|
|
126
|
+
└── {identifier}.xlsx
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### DPA 架构
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
项目根目录/
|
|
133
|
+
└── {artifactId}-api/
|
|
134
|
+
└── src/main/resources/plugins/
|
|
135
|
+
└── zero-launcher-configuration/
|
|
136
|
+
└── security/
|
|
137
|
+
└── RBAC_RESOURCE/
|
|
138
|
+
└── {identifier}.xlsx
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### 模块化项目(target 配置)
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
$ZERO_MODULE/
|
|
145
|
+
└── zero-exmodule-{module}/
|
|
146
|
+
└── zero-exmodule-{module}-domain/
|
|
147
|
+
└── src/main/resources/plugins/
|
|
148
|
+
└── zero-exmodule-{module}/
|
|
149
|
+
└── security/
|
|
150
|
+
└── RBAC_RESOURCE/
|
|
151
|
+
└── {identifier}.xlsx
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 使用示例
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# 标准执行(连接数据库 + 生成 Excel)
|
|
158
|
+
ai ex-api
|
|
159
|
+
|
|
160
|
+
# 仅生成 Excel,跳过数据库操作
|
|
161
|
+
ai ex-api -s
|
|
162
|
+
ai ex-api --skip
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 注意事项
|
|
166
|
+
|
|
167
|
+
1. **去重检查**:默认会检查数据库中是否已存在相同的资源/权限,避免重复插入
|
|
168
|
+
2. **UUID 生成**:所有主键(KEY/ID)会自动生成 UUID
|
|
169
|
+
3. **全局列**:自动填充 `SIGMA`、`APP_ID`、`TENANT_ID`、`CREATED_BY`、`UPDATED_BY`、`CREATED_AT`、`UPDATED_AT`
|
|
170
|
+
4. **模板保持**:生成的 Excel 保留模板的所有格式(颜色、边框、合并单元格等),仅填充数据
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## ai ex-crud
|
|
175
|
+
|
|
176
|
+
### 功能说明
|
|
177
|
+
|
|
178
|
+
从 `.r2mo/task/command/ex-crud` 目录加载多份 YAML 配置文件,多选后按 metadata 从模板生成 CRUD Excel 及 RBAC 授权,处理成功后移至 `backup` 并加 `.bak` 后缀。
|
|
179
|
+
|
|
180
|
+
### 命令格式
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
ai ex-crud [选项]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 选项
|
|
187
|
+
|
|
188
|
+
| 选项 | 别名 | 类型 | 默认值 | 说明 |
|
|
189
|
+
|------|------|------|--------|------|
|
|
190
|
+
| `--skip` | `-s` | boolean | false | 仅生成 CRUD 文件,跳过数据库与角色选择 |
|
|
191
|
+
|
|
192
|
+
### 前置条件
|
|
193
|
+
|
|
194
|
+
#### 环境变量(数据库)
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
export Z_DB_TYPE="MYSQL"
|
|
198
|
+
export Z_DB_HOST="127.0.0.1"
|
|
199
|
+
export Z_DB_PORT="3306"
|
|
200
|
+
export Z_DBS_INSTANCE="your_db"
|
|
201
|
+
export Z_DB_APP_USER="username"
|
|
202
|
+
export Z_DB_APP_PASS="password"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
#### 环境变量(应用)
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
export Z_APP_ID="app-uuid"
|
|
209
|
+
export Z_TENANT="tenant-id"
|
|
210
|
+
export Z_SIGMA="sigma-key"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### 配置文件位置
|
|
214
|
+
|
|
215
|
+
命令会在以下位置查找配置目录(按优先级):
|
|
216
|
+
|
|
217
|
+
1. `当前目录/.r2mo/task/command/ex-crud`
|
|
218
|
+
2. `上级目录/.r2mo/task/command/ex-crud`
|
|
219
|
+
3. `上上级目录/.r2mo/task/command/ex-crud`
|
|
220
|
+
|
|
221
|
+
### YAML 配置格式
|
|
222
|
+
|
|
223
|
+
在 `.r2mo/task/command/ex-crud` 目录下创建 YAML 文件(可多个),格式如下:
|
|
224
|
+
|
|
225
|
+
```yaml
|
|
226
|
+
# 示例:log-crud.yaml
|
|
227
|
+
metadata:
|
|
228
|
+
keyword: "log" # 关键字(必填)
|
|
229
|
+
identifier: "x.log" # 标识符(必填,仅允许字母数字、点、下划线、横线)
|
|
230
|
+
actor: "x-log" # 操作者标识
|
|
231
|
+
name: "日志" # 中文名称
|
|
232
|
+
type: "resource.ambient" # 资源类型
|
|
233
|
+
|
|
234
|
+
# target 配置(可选,用于模块化项目)
|
|
235
|
+
target:
|
|
236
|
+
root: "ZERO_MODULE" # 环境变量名
|
|
237
|
+
module: "ambient" # 模块名
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 占位符替换规则
|
|
241
|
+
|
|
242
|
+
模板中的占位符会按以下顺序替换(避免冲突):
|
|
243
|
+
|
|
244
|
+
| 占位符/字面值 | 对应字段 | 说明 | 示例 |
|
|
245
|
+
|--------------|---------|------|------|
|
|
246
|
+
| `x.log` | `identifier` | 标识符(点分隔) | `x.crud` |
|
|
247
|
+
| `x-log` | `actor` | 操作者(横线分隔) | `x-crud` |
|
|
248
|
+
| `log` | `keyword` | 关键字 | `crud` |
|
|
249
|
+
| `日志` | `name` | 中文名称 | `增删改查` |
|
|
250
|
+
| `resource.ambient` | `type` | 资源类型 | `resource.system` |
|
|
251
|
+
|
|
252
|
+
也支持 `{{identifier}}`、`{{actor}}`、`{{keyword}}`、`{{name}}`、`{{type}}` 形式的占位符。
|
|
253
|
+
|
|
254
|
+
### 执行流程
|
|
255
|
+
|
|
256
|
+
1. **扫描配置文件**:从配置目录加载所有 `.yaml` / `.yml` 文件
|
|
257
|
+
2. **验证 metadata**:检查 `keyword` 和 `identifier` 是否非空且合法
|
|
258
|
+
3. **用户选择**:通过交互式界面多选要执行的配置
|
|
259
|
+
4. **环境检查**:验证环境变量(除非使用 `-s` 跳过)
|
|
260
|
+
5. **生成 CRUD 文件**:
|
|
261
|
+
- 从模板 `src/_template/EXCEL/ex-crud` 复制
|
|
262
|
+
- 替换所有占位符(路径、文件名、文件内容)
|
|
263
|
+
- 重新生成所有 UUID
|
|
264
|
+
- 输出到 `RBAC_CRUD/` 目录
|
|
265
|
+
6. **收集权限 ID**:从生成的 Excel 中提取 `S_PERMISSION` 表的所有 UUID
|
|
266
|
+
7. **角色授权**(非 skip 模式):
|
|
267
|
+
- 连接数据库查询 `S_ROLE` 表
|
|
268
|
+
- 用户多选要授权的角色
|
|
269
|
+
- 生成 `falcon-crud-{identifier}.xlsx` 到 `RBAC_ROLE/ADMIN.SUPER/`
|
|
270
|
+
8. **备份配置**:将处理成功的 YAML 文件移至 `backup/` 并加 `.bak` 后缀
|
|
271
|
+
|
|
272
|
+
### 输出位置
|
|
273
|
+
|
|
274
|
+
#### 标准项目(ONE 架构)
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
项目根目录/
|
|
278
|
+
└── src/main/resources/plugins/
|
|
279
|
+
└── zero-launcher-configuration/
|
|
280
|
+
└── security/
|
|
281
|
+
├── RBAC_CRUD/
|
|
282
|
+
│ └── {identifier}/ # CRUD 文件(替换后)
|
|
283
|
+
│ ├── {identifier}.xlsx
|
|
284
|
+
│ └── seekSyntax.json
|
|
285
|
+
└── RBAC_ROLE/
|
|
286
|
+
└── ADMIN.SUPER/
|
|
287
|
+
└── falcon-crud-{identifier}.xlsx
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
#### DPA 架构
|
|
291
|
+
|
|
292
|
+
```
|
|
293
|
+
项目根目录/
|
|
294
|
+
└── {artifactId}-api/
|
|
295
|
+
└── src/main/resources/plugins/
|
|
296
|
+
└── zero-launcher-configuration/
|
|
297
|
+
└── security/
|
|
298
|
+
├── RBAC_CRUD/
|
|
299
|
+
└── RBAC_ROLE/
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
#### 模块化项目(target 配置)
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
$ZERO_MODULE/
|
|
306
|
+
└── zero-exmodule-{module}/
|
|
307
|
+
└── zero-exmodule-{module}-domain/
|
|
308
|
+
└── src/main/resources/plugins/
|
|
309
|
+
└── zero-exmodule-{module}/
|
|
310
|
+
└── security/
|
|
311
|
+
├── RBAC_CRUD/
|
|
312
|
+
└── RBAC_ROLE/
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### 使用示例
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
# 标准执行(生成 CRUD + 角色授权)
|
|
319
|
+
ai ex-crud
|
|
320
|
+
|
|
321
|
+
# 仅生成 CRUD 文件,跳过数据库和角色选择
|
|
322
|
+
ai ex-crud -s
|
|
323
|
+
ai ex-crud --skip
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### 注意事项
|
|
327
|
+
|
|
328
|
+
1. **metadata 必填**:`keyword` 和 `identifier` 必须非空
|
|
329
|
+
2. **identifier 格式**:仅允许字母数字、点(`.`)、下划线(`_`)、横线(`-`)
|
|
330
|
+
3. **UUID 重新生成**:模板中所有 UUID 会被替换为新生成的 UUID
|
|
331
|
+
4. **Excel 单元格替换**:`.xlsx` 文件使用 ExcelJS 按单元格替换,保留格式
|
|
332
|
+
5. **角色默认值**:如果未选择角色,会自动选择 `超级管理员`(NAME 或 CODE 为 `ADMIN.SUPER` / `ADMIN_SUPER`)
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## ai ex-perm
|
|
337
|
+
|
|
338
|
+
### 功能说明
|
|
339
|
+
|
|
340
|
+
按参考角色复制权限到指定角色。从固定的参考角色(`e501b47a-c08b-4c83-b12b-95ad82873e96`)的 `R_ROLE_PERM` 表中读取所有权限,复制到用户指定的目标角色。
|
|
341
|
+
|
|
342
|
+
### 命令格式
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
ai ex-perm -r <角色名或角色CODE>
|
|
346
|
+
ai ex-perm --role <角色名或角色CODE>
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### 选项
|
|
350
|
+
|
|
351
|
+
| 选项 | 别名 | 类型 | 说明 |
|
|
352
|
+
|------|------|------|------|
|
|
353
|
+
| `--role` | `-r` | string | 角色名或角色 CODE,对应 `S_ROLE.NAME` 或 `S_ROLE.CODE`(必填) |
|
|
354
|
+
|
|
355
|
+
### 前置条件
|
|
356
|
+
|
|
357
|
+
#### 环境变量(数据库)
|
|
358
|
+
|
|
359
|
+
必须设置以下环境变量(可在 `.r2mo/app.env` 中 export):
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
export Z_DB_TYPE="MYSQL" # 数据库类型
|
|
363
|
+
export Z_DB_HOST="127.0.0.1" # 数据库主机
|
|
364
|
+
export Z_DB_PORT="3306" # 数据库端口
|
|
365
|
+
export Z_DBS_INSTANCE="your_db" # 业务数据库实例名
|
|
366
|
+
export Z_DB_APP_USER="username" # 数据库用户
|
|
367
|
+
export Z_DB_APP_PASS="password" # 数据库密码
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### app.env 文件位置
|
|
371
|
+
|
|
372
|
+
命令会在以下位置查找 `app.env` 文件(按优先级):
|
|
373
|
+
|
|
374
|
+
#### ONE 架构
|
|
375
|
+
|
|
376
|
+
```
|
|
377
|
+
当前目录/.r2mo/app.env
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
#### DPA 架构
|
|
381
|
+
|
|
382
|
+
```
|
|
383
|
+
当前目录/.r2mo/app.env
|
|
384
|
+
或
|
|
385
|
+
当前目录/{artifactId}-api/.r2mo/app.env
|
|
386
|
+
或
|
|
387
|
+
上级目录/{artifactId}-api/.r2mo/app.env
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
其中 `{artifactId}` 从 `pom.xml` 中解析,或使用当前目录名。
|
|
391
|
+
|
|
392
|
+
### 执行流程
|
|
393
|
+
|
|
394
|
+
1. **解析参数**:获取 `-r` / `--role` 参数(角色名或 CODE)
|
|
395
|
+
2. **加载环境变量**:从 `.r2mo/app.env` 加载数据库配置
|
|
396
|
+
3. **环境检查**:验证数据库环境变量是否齐全
|
|
397
|
+
4. **连接数据库**:建立数据库连接
|
|
398
|
+
5. **查询目标角色**:在 `S_ROLE` 表中按 `NAME` 或 `CODE` 匹配角色
|
|
399
|
+
6. **查询参考角色权限**:从 `R_ROLE_PERM` 表读取参考角色的所有权限
|
|
400
|
+
7. **复制权限**:将参考角色的权限复制到目标角色(使用 `INSERT IGNORE` 避免重复)
|
|
401
|
+
8. **输出报告**:显示详细的执行报告
|
|
402
|
+
|
|
403
|
+
### 使用示例
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
# 按角色名称复制权限
|
|
407
|
+
ai ex-perm -r 管理员
|
|
408
|
+
ai ex-perm --role 管理员
|
|
409
|
+
|
|
410
|
+
# 按角色 CODE 复制权限
|
|
411
|
+
ai ex-perm -r ADMIN
|
|
412
|
+
ai ex-perm --role ADMIN.SUPER
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### 执行报告示例
|
|
416
|
+
|
|
417
|
+
```
|
|
418
|
+
----------------------------------------
|
|
419
|
+
ai perm 执行报告
|
|
420
|
+
----------------------------------------
|
|
421
|
+
⚙️ 环境
|
|
422
|
+
app.env : /path/to/.r2mo/app.env
|
|
423
|
+
数据库类型 : MYSQL
|
|
424
|
+
数据库实例 : your_db
|
|
425
|
+
连接地址 : 127.0.0.1:3306
|
|
426
|
+
数据库用户 : username
|
|
427
|
+
👤 目标角色(-r 指定)
|
|
428
|
+
输入 : 管理员
|
|
429
|
+
ID : abc-123-def-456
|
|
430
|
+
NAME : 管理员
|
|
431
|
+
CODE : ADMIN
|
|
432
|
+
📋 参考角色(复制来源)
|
|
433
|
+
ROLE_ID : e501b47a-c08b-4c83-b12b-95ad82873e96
|
|
434
|
+
R_ROLE_PERM 条数 : 150
|
|
435
|
+
✅ 权限复制结果
|
|
436
|
+
本次插入 : 120 条
|
|
437
|
+
重复跳过 : 30 条
|
|
438
|
+
合计处理 : 150 条
|
|
439
|
+
----------------------------------------
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### 注意事项
|
|
443
|
+
|
|
444
|
+
1. **参考角色固定**:参考角色 ID 硬编码为 `e501b47a-c08b-4c83-b12b-95ad82873e96`
|
|
445
|
+
2. **去重机制**:使用 `INSERT IGNORE` 避免重复插入,已存在的权限会被跳过
|
|
446
|
+
3. **角色匹配**:支持按 `NAME` 或 `CODE` 匹配,优先匹配第一条记录
|
|
447
|
+
4. **环境变量来源**:可以从 `.r2mo/app.env` 文件加载,也可以在当前 shell 中已 export
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## ai ex-app
|
|
452
|
+
|
|
453
|
+
### 功能说明
|
|
454
|
+
|
|
455
|
+
清理缓存目录中不存在于数据库的应用实例。从数据库 `X_APP` 表查询所有应用 ID,对比缓存目录(`apps/` 或 `$R2MO_HOME/apps/`),删除数据库中不存在的孤立缓存目录。
|
|
456
|
+
|
|
457
|
+
### 命令格式
|
|
458
|
+
|
|
459
|
+
```bash
|
|
460
|
+
ai ex-app
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### 选项
|
|
464
|
+
|
|
465
|
+
无选项。
|
|
466
|
+
|
|
467
|
+
### 前置条件
|
|
468
|
+
|
|
469
|
+
#### 环境变量(数据库)
|
|
470
|
+
|
|
471
|
+
必须设置以下环境变量(可在 `.r2mo/app.env` 中 export):
|
|
472
|
+
|
|
473
|
+
```bash
|
|
474
|
+
export Z_DBS_INSTANCE="your_db" # 数据库实例名(必填)
|
|
475
|
+
export Z_DB_APP_USER="username" # 数据库用户(必填)
|
|
476
|
+
export Z_DB_APP_PASS="password" # 数据库密码(必填)
|
|
477
|
+
export Z_DB_HOST="127.0.0.1" # 数据库主机(可选,默认 localhost)
|
|
478
|
+
export Z_DB_PORT="3306" # 数据库端口(可选,默认 3306)
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
#### 环境变量(缓存目录)
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
export R2MO_HOME="/path/to/r2mo" # R2MO 主目录(可选)
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### 缓存目录位置
|
|
488
|
+
|
|
489
|
+
命令会在以下位置查找缓存目录(按优先级):
|
|
490
|
+
|
|
491
|
+
1. `$R2MO_HOME/apps/`(如果设置了 `R2MO_HOME` 环境变量)
|
|
492
|
+
2. `当前目录/apps/`(默认)
|
|
493
|
+
|
|
494
|
+
### 执行流程
|
|
495
|
+
|
|
496
|
+
1. **加载环境变量**:从 `.r2mo/app.env` 加载数据库配置
|
|
497
|
+
2. **环境检查**:验证数据库核心环境变量(`Z_DBS_INSTANCE`、`Z_DB_APP_USER`、`Z_DB_APP_PASS`)
|
|
498
|
+
3. **连接数据库**:建立数据库连接
|
|
499
|
+
4. **查询应用 ID**:从 `X_APP` 表提取所有应用 ID
|
|
500
|
+
5. **扫描缓存目录**:列出缓存目录中的所有子目录
|
|
501
|
+
6. **识别孤立目录**:对比数据库 ID,找出不存在于数据库的缓存目录
|
|
502
|
+
7. **用户确认**:显示孤立目录列表,询问是否删除
|
|
503
|
+
8. **删除目录**:递归删除用户确认的孤立目录
|
|
504
|
+
9. **输出报告**:显示删除结果(成功/失败数量)
|
|
505
|
+
|
|
506
|
+
### 使用示例
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
# 执行清理
|
|
510
|
+
ai ex-app
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### 执行流程示例
|
|
514
|
+
|
|
515
|
+
```
|
|
516
|
+
✓ 已加载环境变量:/path/to/.r2mo/app.env
|
|
517
|
+
✓ 环境变量检查通过:Z_DBS_INSTANCE, Z_DB_APP_USER, Z_DB_APP_PASS
|
|
518
|
+
连接数据库:your_db @ 127.0.0.1:3306(用户 username)
|
|
519
|
+
查询 X_APP 表,提取所有应用 ID…
|
|
520
|
+
✓ 数据库中共有 5 个应用:app-001, app-002, app-003, app-004, app-005
|
|
521
|
+
使用当前目录缓存:/path/to/project/apps
|
|
522
|
+
✓ 缓存目录中共有 7 个子目录
|
|
523
|
+
发现 2 个孤立的缓存目录(数据库中不存在):
|
|
524
|
+
- app-old-001 (/path/to/project/apps/app-old-001)
|
|
525
|
+
- app-old-002 (/path/to/project/apps/app-old-002)
|
|
526
|
+
? 确认删除以上 2 个孤立的缓存目录? (y/N)
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
### 注意事项
|
|
530
|
+
|
|
531
|
+
1. **安全确认**:删除前会显示孤立目录列表并要求用户确认
|
|
532
|
+
2. **递归删除**:会递归删除整个目录及其所有内容
|
|
533
|
+
3. **缓存目录优先级**:优先使用 `R2MO_HOME`,其次使用当前目录
|
|
534
|
+
4. **数据库表**:依赖 `X_APP` 表的 `id` 列
|
|
535
|
+
5. **目录名匹配**:缓存目录名必须与数据库中的应用 ID 完全一致
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
## 通用说明
|
|
540
|
+
|
|
541
|
+
### app.env 文件格式
|
|
542
|
+
|
|
543
|
+
`.r2mo/app.env` 文件使用 shell export 语法:
|
|
544
|
+
|
|
545
|
+
```bash
|
|
546
|
+
# 数据库配置
|
|
547
|
+
export Z_DB_TYPE="MYSQL"
|
|
548
|
+
export Z_DB_HOST="127.0.0.1"
|
|
549
|
+
export Z_DB_PORT="3306"
|
|
550
|
+
export Z_DBS_INSTANCE="your_database"
|
|
551
|
+
export Z_DB_APP_USER="your_username"
|
|
552
|
+
export Z_DB_APP_PASS="your_password"
|
|
553
|
+
|
|
554
|
+
# 应用配置
|
|
555
|
+
export Z_APP_ID="your-app-uuid"
|
|
556
|
+
export Z_TENANT="your-tenant-id"
|
|
557
|
+
export Z_SIGMA="your-sigma-key"
|
|
558
|
+
|
|
559
|
+
# 模块化项目(可选)
|
|
560
|
+
export ZERO_MODULE="/path/to/zero-modules"
|
|
561
|
+
|
|
562
|
+
# 缓存目录(可选)
|
|
563
|
+
export R2MO_HOME="/path/to/r2mo"
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
### 项目架构类型
|
|
567
|
+
|
|
568
|
+
#### ONE 架构(单体项目)
|
|
569
|
+
|
|
570
|
+
```
|
|
571
|
+
project-root/
|
|
572
|
+
├── pom.xml
|
|
573
|
+
├── .r2mo/
|
|
574
|
+
│ └── app.env
|
|
575
|
+
└── src/main/resources/plugins/
|
|
576
|
+
└── zero-launcher-configuration/
|
|
577
|
+
└── security/
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
#### DPA 架构(Domain-Driven Architecture)
|
|
581
|
+
|
|
582
|
+
```
|
|
583
|
+
project-root/
|
|
584
|
+
├── pom.xml
|
|
585
|
+
├── {artifactId}-api/
|
|
586
|
+
│ ├── .r2mo/
|
|
587
|
+
│ │ └── app.env
|
|
588
|
+
│ └── src/main/resources/plugins/
|
|
589
|
+
├── {artifactId}-domain/
|
|
590
|
+
└── {artifactId}-infra/
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
#### 模块化项目(ZERO_MODULE)
|
|
594
|
+
|
|
595
|
+
```
|
|
596
|
+
$ZERO_MODULE/
|
|
597
|
+
└── zero-exmodule-{module}/
|
|
598
|
+
├── pom.xml
|
|
599
|
+
├── zero-exmodule-{module}-api/
|
|
600
|
+
│ └── .r2mo/
|
|
601
|
+
│ └── app.env
|
|
602
|
+
└── zero-exmodule-{module}-domain/
|
|
603
|
+
└── src/main/resources/plugins/
|
|
604
|
+
└── zero-exmodule-{module}/
|
|
605
|
+
└── security/
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
### 数据库表结构
|
|
609
|
+
|
|
610
|
+
#### RBAC 核心表
|
|
611
|
+
|
|
612
|
+
- `S_RESOURCE`:资源表(API 端点)
|
|
613
|
+
- `S_ACTION`:操作表(HTTP 方法)
|
|
614
|
+
- `S_PERMISSION`:权限表(资源 + 操作)
|
|
615
|
+
- `S_PERM_SET`:权限集表(权限分组)
|
|
616
|
+
- `S_ROLE`:角色表
|
|
617
|
+
- `R_ROLE_PERM`:角色权限关系表
|
|
618
|
+
|
|
619
|
+
#### 应用表
|
|
620
|
+
|
|
621
|
+
- `X_APP`:应用实例表
|
|
622
|
+
|
|
623
|
+
### Excel 模板说明
|
|
624
|
+
|
|
625
|
+
#### {TABLE} 标记格式
|
|
626
|
+
|
|
627
|
+
Excel 模板使用 `{TABLE}` 标记定义数据区域:
|
|
628
|
+
|
|
629
|
+
```
|
|
630
|
+
行1: {TABLE} | 表名(如 S_RESOURCE)
|
|
631
|
+
行2: 中文表头 | 资源标识 | 资源名称 | ...
|
|
632
|
+
行3: 英文列名 | identifier | name | ...
|
|
633
|
+
行4+: 数据行
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
#### 模板位置
|
|
637
|
+
|
|
638
|
+
- `src/_template/EXCEL/ex-api/template-RBAC_RESOURCE.xlsx`
|
|
639
|
+
- `src/_template/EXCEL/ex-api/template-RBAC_ROLE.xlsx`
|
|
640
|
+
- `src/_template/EXCEL/ex-crud/` 目录下的所有文件
|
|
641
|
+
|
|
642
|
+
### 常见问题
|
|
643
|
+
|
|
644
|
+
#### Q: 找不到 .r2mo/app.env 文件
|
|
645
|
+
|
|
646
|
+
**A:** 确保在项目根目录执行命令,或在 DPA 架构下确保 `{artifactId}-api/.r2mo/app.env` 存在。
|
|
647
|
+
|
|
648
|
+
#### Q: 环境变量不齐
|
|
649
|
+
|
|
650
|
+
**A:** 检查 `.r2mo/app.env` 文件中是否包含所有必需的环境变量,确保使用 `export` 语法。
|
|
651
|
+
|
|
652
|
+
#### Q: 数据库连接失败
|
|
653
|
+
|
|
654
|
+
**A:** 检查数据库配置(主机、端口、用户名、密码)是否正确,确保数据库服务正在运行。
|
|
655
|
+
|
|
656
|
+
#### Q: 角色查询不到
|
|
657
|
+
|
|
658
|
+
**A:** 确保 `S_ROLE` 表中存在该角色,可以执行 `SELECT ID, NAME, CODE FROM S_ROLE;` 查看已有角色。
|
|
659
|
+
|
|
660
|
+
#### Q: 生成的 Excel 找不到
|
|
661
|
+
|
|
662
|
+
**A:** 检查项目架构类型(ONE / DPA / 模块化),确认输出路径是否正确。
|
|
663
|
+
|
|
664
|
+
#### Q: YAML 配置被跳过
|
|
665
|
+
|
|
666
|
+
**A:** 检查 YAML 格式是否正确,`metadata` 字段是否完整,`keyword` 和 `identifier` 是否非空。
|
|
667
|
+
|
|
668
|
+
---
|
|
669
|
+
|
|
670
|
+
## 版本信息
|
|
671
|
+
|
|
672
|
+
- 文档版本:1.0.0
|
|
673
|
+
- 适用于:r2mo-init v1.0.80+
|
|
674
|
+
- 最后更新:2026-03-05
|
package/package.json
CHANGED