cloudcc-cli 2.3.4 → 2.3.5

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.
Files changed (72) hide show
  1. package/.claude/settings.json +22 -1
  2. package/.cursor/skills/cloudcc-cli-dev/SKILL.md +175 -0
  3. package/.cursor/skills/cloudcc-dev-skill/SKILL.md +71 -0
  4. package/README.md +54 -7
  5. package/bin/cc.js +106 -28
  6. package/bin/index.js +54 -55
  7. package/mcp/cliRunner.js +11 -4
  8. package/mcp/index.js +12 -2
  9. package/mcp/tools/CloudCC Development Overview/handler.js +1 -1
  10. package/mcp/tools/JSP Migrator/handler.js +46 -0
  11. package/package.json +3 -4
  12. package/src/button/create.js +169 -0
  13. package/src/button/delete.js +35 -0
  14. package/src/button/doc.js +36 -0
  15. package/src/button/docs/devguide.md +133 -0
  16. package/src/button/docs/introduction.md +60 -0
  17. package/src/button/get.js +60 -0
  18. package/src/button/index.js +20 -0
  19. package/src/classes/docs/introduction.md +0 -20
  20. package/src/identityProvider/create.js +78 -0
  21. package/src/identityProvider/delete.js +61 -0
  22. package/src/identityProvider/doc.js +46 -0
  23. package/src/identityProvider/docs/devguide.md +107 -0
  24. package/src/identityProvider/docs/introduction.md +31 -0
  25. package/src/identityProvider/download.js +105 -0
  26. package/src/identityProvider/get.js +70 -0
  27. package/src/identityProvider/index.js +12 -0
  28. package/src/permission/add.js +164 -0
  29. package/src/permission/assign.js +84 -0
  30. package/src/permission/docs/devguide.md +238 -0
  31. package/src/permission/docs/introduction.md +200 -0
  32. package/src/permission/get.js +107 -0
  33. package/src/permission/index.js +10 -0
  34. package/src/permission/remove.js +145 -0
  35. package/src/project/docs/devguide.md +7 -6
  36. package/src/singleSignOn/delete.js +61 -0
  37. package/src/singleSignOn/doc.js +46 -0
  38. package/src/singleSignOn/docs/devguide.md +61 -0
  39. package/src/singleSignOn/docs/introduction.md +3 -0
  40. package/src/singleSignOn/get.js +70 -0
  41. package/src/singleSignOn/index.js +10 -0
  42. package/src/staticResource/docs/introduction.md +44 -1
  43. package/src/validationRule/create.js +2 -2
  44. package/src/version/actionHelp.js +25 -0
  45. package/src/version/docs.js +26 -0
  46. package/src/version/doctor.js +25 -0
  47. package/src/version/get.js +7 -1
  48. package/src/version/help.js +47 -0
  49. package/src/version/index.js +9 -2
  50. package/src/version/initHelp.js +13 -0
  51. package/src/version/listModuleCommands.js +241 -0
  52. package/src/version/stats.js +44 -0
  53. package/src/version/uninstall.js +30 -0
  54. package/src/version/update.js +13 -0
  55. package/utils/checkVersion.js +31 -2
  56. package/utils/commandStats.js +94 -0
  57. package/utils/formatReleaseNotes.js +312 -0
  58. package/utils/readmeReleases.js +69 -0
  59. package/.cloudcc-cache.json +0 -54
  60. package/.cursor/skills/cloudcc-cli-dev.zip +0 -0
  61. package/.cursor/skills/cloudcc-dev-usage/SKILL.md +0 -68
  62. package/build/component-cc-cc-dd.common.js +0 -831
  63. package/build/component-cc-cc-dd.common.js.map +0 -1
  64. package/build/component-cc-cc-dd.css +0 -1
  65. package/build/component-cc-cc-dd.umd.js +0 -874
  66. package/build/component-cc-cc-dd.umd.js.map +0 -1
  67. package/build/component-cc-cc-dd.umd.min.js +0 -8
  68. package/build/component-cc-cc-dd.umd.min.js.map +0 -1
  69. package/build/demo.html +0 -1
  70. package/plugins/cc-cc-dd/cc-cc-dd.vue +0 -32
  71. package/plugins/cc-cc-dd/components/HelloWorld.vue +0 -11
  72. package/plugins/cc-cc-dd/config.json +0 -6
@@ -0,0 +1,84 @@
1
+ const chalk = require('chalk');
2
+ const { postClass } = require("../../utils/http");
3
+ const { getPackageJson } = require("../../utils/config");
4
+
5
+ /**
6
+ * 获取权限集已分配的用户列表
7
+ * 用法:cc assign permission <projectPath> <permsetId>
8
+ * @param {Array} argvs - 命令行参数数组
9
+ * @param {boolean} isMcp - 是否为MCP模式
10
+ * @returns {Promise<Object>} 包含用户列表和权限集信息的对象
11
+ */
12
+ async function assign(argvs, isMcp = false) {
13
+ try {
14
+ const projectPath = argvs[2] || process.cwd();
15
+ const permsetId = argvs[3];
16
+
17
+ if (!permsetId) {
18
+ console.error();
19
+ console.error(chalk.red('Error: 缺少权限集ID'));
20
+ console.error('用法: cc assign permission <path> <permsetId>');
21
+ console.error('示例:');
22
+ console.error(' cc assign permission . "cac20258F0E4ABBnTxwi"');
23
+ console.error();
24
+ throw new Error('缺少必需参数: permsetId');
25
+ }
26
+
27
+ const config = await getPackageJson(projectPath);
28
+
29
+ const res = await postClass(
30
+ config.setupSvc + "/api/permissionGroup/queryUserlistBypermsetsid",
31
+ { id: permsetId },
32
+ config.accessToken
33
+ );
34
+
35
+ if (res && res.result && res.data) {
36
+ const userList = res.data.userlist || [];
37
+ const permsets = res.data.permsets || {};
38
+ const permsetName = permsets.values?.name || permsetId;
39
+
40
+ if (!isMcp) {
41
+ console.log();
42
+ console.log(chalk.green(`权限集: ${permsetName}`));
43
+ console.log(chalk.green(`ID: ${permsetId}`));
44
+ console.log();
45
+
46
+ if (userList.length === 0) {
47
+ console.log(chalk.yellow("该权限集尚未分配给任何用户"));
48
+ } else {
49
+ console.log(chalk.green(`已分配 ${userList.length} 个用户:`));
50
+ console.log();
51
+
52
+ // 表格形式输出
53
+ const idWidth = Math.max(20, ...userList.map(item => item.id?.length || 0));
54
+ const nameWidth = Math.max(8, ...userList.map(item => item.name?.length || 0));
55
+ const loginWidth = Math.max(20, ...userList.map(item => item.loginname?.length || 0));
56
+
57
+ console.log(chalk.cyan(` ${'用户ID'.padEnd(idWidth)} ${'姓名'.padEnd(nameWidth)} ${'登录名'.padEnd(loginWidth)} 简档 角色`));
58
+ console.log(chalk.cyan(` ${'-'.repeat(idWidth)} ${'-'.repeat(nameWidth)} ${'-'.repeat(loginWidth)} ---------------- ----------------`));
59
+
60
+ userList.forEach(item => {
61
+ console.log(` ${(item.id || '').padEnd(idWidth)} ${(item.name || '').padEnd(nameWidth)} ${(item.loginname || '').padEnd(loginWidth)} ${(item.profilename || '').padEnd(16)} ${item.rolename || ''}`);
62
+ });
63
+ console.log();
64
+ }
65
+ }
66
+
67
+ return {
68
+ userList: userList,
69
+ permsets: permsets
70
+ };
71
+ }
72
+
73
+ const msg = res && (res.returnInfo || res.message) ? (res.returnInfo || res.message) : "Unknown error";
74
+ throw new Error("获取权限集用户列表失败: " + msg);
75
+
76
+ } catch (error) {
77
+ if (!isMcp) {
78
+ console.error(chalk.red("Error: " + error.message));
79
+ }
80
+ throw error;
81
+ }
82
+ }
83
+
84
+ module.exports = assign;
@@ -0,0 +1,238 @@
1
+ # CloudCC 权限集 CLI 命令说明
2
+
3
+ 命令格式为 **`cc <动作> permission …`**(动作即下表「操作」列)。
4
+
5
+ ## 支持的命令
6
+
7
+ | 操作 | 说明 |
8
+ |------|------|
9
+ | `get` | 查询权限集列表 |
10
+ | `assign` | 查看权限集已分配的用户 |
11
+ | `add` | 为权限集添加分配用户 |
12
+ | `remove` | 从权限集移除分配用户 |
13
+
14
+ ## CLI 命令详解
15
+
16
+ ### 查询权限集列表
17
+
18
+ ```bash
19
+ cc get permission <path> [viewId] [page] [pageSize] [searchKeyWord]
20
+ ```
21
+
22
+ **参数说明:**
23
+
24
+ | 参数 | 必填 | 说明 |
25
+ |------|------|------|
26
+ | `path` | 否 | 项目路径,`.` 表示当前目录,默认为当前目录 |
27
+ | `viewId` | 否 | 视图ID,不传则自动获取 |
28
+ | `page` | 否 | 页码,默认为 1 |
29
+ | `pageSize` | 否 | 每页数量,默认为 100000 |
30
+ | `searchKeyWord` | 否 | 搜索关键词 |
31
+
32
+ **示例:**
33
+
34
+ ```bash
35
+ # 获取所有权限集列表
36
+ cc get permission .
37
+
38
+ # 使用指定视图获取权限集
39
+ cc get permission . "00000000000000000000"
40
+
41
+ # 搜索权限集
42
+ cc get permission . "" 1 100 "测试"
43
+ ```
44
+
45
+ **输出示例:**
46
+
47
+ ```
48
+ 找到 17 个权限集:
49
+
50
+ ID 名称 许可证 系统管理员
51
+ -------------------- --------------- ---------------- ----------
52
+ aabbudgeting2024ACgL 利润云标准权限集 Budgeting 是
53
+ cac202530FE035CHCFGi cloudcc222 CloudCC 用户 否
54
+ cac2025F039C6A5DQGrt TestMFA22 CloudCC 用户 否
55
+ cac20258F0E4ABBnTxwi 古语云 CloudCC 用户 否
56
+ ...
57
+ ```
58
+
59
+ ### 查看已分配用户
60
+
61
+ ```bash
62
+ cc assign permission <path> <permsetId>
63
+ ```
64
+
65
+ **参数说明:**
66
+
67
+ | 参数 | 必填 | 说明 |
68
+ |------|------|------|
69
+ | `path` | 否 | 项目路径,`.` 表示当前目录,默认为当前目录 |
70
+ | `permsetId` | 是 | 权限集ID |
71
+
72
+ **示例:**
73
+
74
+ ```bash
75
+ # 查看指定权限集的已分配用户
76
+ cc assign permission . "cac20258F0E4ABBnTxwi"
77
+ ```
78
+
79
+ **输出示例:**
80
+
81
+ ```
82
+ 权限集: 古语云
83
+ ID: cac20258F0E4ABBnTxwi
84
+
85
+ 已分配 6 个用户:
86
+
87
+ 用户ID 姓名 登录名 简档 角色
88
+ -------------------- -------- -------------------- ---------------- ----------------
89
+ 00520263DB1540FTPmXK 我重新注册 421865903teet@qq.com Cloudcc Partner 简档 青青草原艾艾合作伙伴用户
90
+ 005202652FF2FA8dltk1 auto行 autoTest@cloudcc.com 系统管理员 测试
91
+ ...
92
+ ```
93
+
94
+ ### 添加分配用户
95
+
96
+ ```bash
97
+ cc add permission <path> <permsetId> [userIds...]
98
+ ```
99
+
100
+ **参数说明:**
101
+
102
+ | 参数 | 必填 | 说明 |
103
+ |------|------|------|
104
+ | `path` | 否 | 项目路径,`.` 表示当前目录,默认为当前目录 |
105
+ | `permsetId` | 是 | 权限集ID |
106
+ | `userIds` | 否 | 要分配的用户ID列表,不传则进入交互式选择 |
107
+
108
+ **示例:**
109
+
110
+ ```bash
111
+ # 交互式选择用户进行分配
112
+ cc add permission . "cac20258F0E4ABBnTxwi"
113
+
114
+ # 直接指定单个用户ID进行分配
115
+ cc add permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT"
116
+
117
+ # 直接指定多个用户ID进行分配(用空格分隔)
118
+ cc add permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT" "0052026C0A60504jNcbV"
119
+ ```
120
+
121
+ **交互式选择模式:**
122
+
123
+ ```
124
+ 正在获取用户列表...
125
+
126
+ ? 请选择要分配的用户(使用空格键选择,回车确认):
127
+ ❯◯ 张三 (zhangsan@example.com) - 00520260C00C6FEfsMnT
128
+ ◯ 李四 (lisi@example.com) - 0052026C0A60504jNcbV
129
+ ◯ 王五 (wangwu@example.com) - 0052026D0A60504jNcbW
130
+ (Move up and down to reveal more choices)
131
+
132
+ 正在为权限集 cac20258F0E4ABBnTxwi 分配 2 个用户...
133
+
134
+ ✓ 用户分配成功
135
+ 权限集ID: cac20258F0E4ABBnTxwi
136
+ 分配用户数: 2
137
+ ```
138
+
139
+ ### 移除分配用户
140
+
141
+ ```bash
142
+ cc remove permission <path> <permsetId> [userIds...]
143
+ ```
144
+
145
+ **参数说明:**
146
+
147
+ | 参数 | 必填 | 说明 |
148
+ |------|------|------|
149
+ | `path` | 否 | 项目路径,`.` 表示当前目录,默认为当前目录 |
150
+ | `permsetId` | 是 | 权限集ID |
151
+ | `userIds` | 否 | 要移除的用户ID列表,不传则进入交互式选择 |
152
+
153
+ **示例:**
154
+
155
+ ```bash
156
+ # 交互式选择用户进行移除
157
+ cc remove permission . "cac20258F0E4ABBnTxwi"
158
+
159
+ # 直接指定单个用户ID进行移除
160
+ cc remove permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT"
161
+
162
+ # 直接指定多个用户ID进行移除(用空格分隔)
163
+ cc remove permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT" "0052026C0A60504jNcbV"
164
+ ```
165
+
166
+ **交互式选择模式:**
167
+
168
+ ```
169
+ 正在获取已分配用户列表...
170
+
171
+ ? 请选择要删除的用户(使用空格键选择,回车确认):
172
+ ❯◯ 张三 (zhangsan@example.com) - 00520260C00C6FEfsMnT
173
+ ◯ 李四 (lisi@example.com) - 0052026C0A60504jNcbV
174
+ (Move up and down to reveal more choices)
175
+
176
+ ? 确定要从权限集中移除 2 个用户吗? (y/N) y
177
+
178
+ 正在从权限集 cac20258F0E4ABBnTxwi 移除 2 个用户...
179
+
180
+ ✓ 用户移除成功
181
+ 权限集ID: cac20258F0E4ABBnTxwi
182
+ 移除用户数: 2
183
+ ```
184
+
185
+ ## 完整使用流程示例
186
+
187
+ ```bash
188
+ # 1. 查看所有权限集
189
+ cc get permission .
190
+
191
+ # 2. 查看某个权限集的已分配用户
192
+ cc assign permission . "cac20258F0E4ABBnTxwi"
193
+
194
+ # 3. 为权限集添加用户(交互式选择)
195
+ cc add permission . "cac20258F0E4ABBnTxwi"
196
+
197
+ # 4. 再次查看已分配用户,确认添加成功
198
+ cc assign permission . "cac20258F0E4ABBnTxwi"
199
+
200
+ # 5. 移除某些用户(交互式选择)
201
+ cc remove permission . "cac20258F0E4ABBnTxwi"
202
+ ```
203
+
204
+ ## 数据字段说明
205
+
206
+ ### 权限集对象字段
207
+
208
+ | 字段名 | 类型 | 说明 |
209
+ |--------|------|------|
210
+ | `id` | string | 权限集唯一标识 |
211
+ | `name` | string | 权限集名称 |
212
+ | `licence` | string | 许可证类型 |
213
+ | `sysadmin` | string | 是否为系统管理员权限("1"表示是,"0"表示否) |
214
+
215
+ ### 用户对象字段
216
+
217
+ | 字段名 | 类型 | 说明 |
218
+ |--------|------|------|
219
+ | `id` | string | 用户唯一标识 |
220
+ | `name` | string | 用户姓名 |
221
+ | `loginname` | string | 登录名(邮箱) |
222
+ | `profilename` | string | 简档名称 |
223
+ | `profileid` | string | 简档ID |
224
+ | `rolename` | string | 角色名称 |
225
+ | `roleid` | string | 角色ID |
226
+ | `alias` | string | 别名 |
227
+
228
+ ## 相关 API 接口
229
+
230
+ | 接口 | 说明 |
231
+ |------|------|
232
+ | `POST /api/permissionGroup/queryPermsetsList` | 获取权限集视图列表 |
233
+ | `POST /api/permissionGroup/listAJAX` | 查询权限集列表 |
234
+ | `POST /api/permissionGroup/queryUserlistBypermsetsid` | 查询权限集已分配用户 |
235
+ | `POST /api/permissionGroup/addUsersetup` | 为权限集添加用户 |
236
+ | `POST /api/permissionGroup/deleteUsersetup` | 从权限集移除用户 |
237
+ | `POST /api/usermange/queryUser` | 获取用户视图 |
238
+ | `POST /api/usermange/queryUserList` | 查询用户列表 |
@@ -0,0 +1,200 @@
1
+ # Permission(权限集管理)
2
+
3
+ Permission 模块用于管理 CloudCC 权限集的分配功能,包括查看权限集列表、查看已分配用户、添加分配用户和删除分配用户。
4
+
5
+ ## 功能介绍
6
+
7
+ - **查看权限集列表**: 获取系统中的所有权限集
8
+ - **查看已分配用户**: 查看指定权限集已分配的用户列表
9
+ - **添加分配用户**: 为指定权限集分配用户
10
+ - **删除分配用户**: 从指定权限集中移除用户
11
+
12
+ ## 命令
13
+
14
+ 命令统一为 **`cc <动作> <资源> …`**;本模块资源名为 **`permission`**。
15
+
16
+ ### 获取权限集列表
17
+
18
+ ```bash
19
+ cc get permission <path> [viewId] [page] [pageSize] [searchKeyWord]
20
+ ```
21
+
22
+ **参数说明:**
23
+ - `path` - 项目路径(可选,默认为当前目录)
24
+ - `viewId` - 视图ID(可选,不传则自动获取)
25
+ - `page` - 页码(可选,默认为1)
26
+ - `pageSize` - 每页数量(可选,默认为100000)
27
+ - `searchKeyWord` - 搜索关键词(可选)
28
+
29
+ **示例:**
30
+
31
+ ```bash
32
+ # 获取所有权限集列表
33
+ cc get permission .
34
+
35
+ # 使用指定视图获取权限集
36
+ cc get permission . "00000000000000000000"
37
+
38
+ # 搜索权限集
39
+ cc get permission . "" 1 100 "测试"
40
+ ```
41
+
42
+ ### 查看已分配用户
43
+
44
+ ```bash
45
+ cc assign permission <path> <permsetId>
46
+ ```
47
+
48
+ **参数说明:**
49
+ - `path` - 项目路径(可选,默认为当前目录)
50
+ - `permsetId` - 权限集ID(必需)
51
+
52
+ **示例:**
53
+
54
+ ```bash
55
+ # 查看指定权限集的已分配用户
56
+ cc assign permission . "cac20258F0E4ABBnTxwi"
57
+ ```
58
+
59
+ **输出示例:**
60
+
61
+ ```
62
+ 权限集: 古语云
63
+ ID: cac20258F0E4ABBnTxwi
64
+
65
+ 已分配 6 个用户:
66
+
67
+ 用户ID 姓名 登录名 简档 角色
68
+ -------------------- -------- -------------------- ---------------- ----------------
69
+ 00520263DB1540FTPmXK 我重新注册 421865903teet@qq.com Cloudcc Partner 简档 青青草原艾艾合作伙伴用户
70
+ 005202652FF2FA8dltk1 auto行 autoTest@cloudcc.com 系统管理员 测试
71
+ ...
72
+ ```
73
+
74
+ ### 添加分配用户
75
+
76
+ ```bash
77
+ cc add permission <path> <permsetId> [userIds...]
78
+ ```
79
+
80
+ **参数说明:**
81
+ - `path` - 项目路径(可选,默认为当前目录)
82
+ - `permsetId` - 权限集ID(必需)
83
+ - `userIds` - 要分配的用户ID列表(可选,不传则进入交互式选择)
84
+
85
+ **示例:**
86
+
87
+ ```bash
88
+ # 交互式选择用户进行分配
89
+ cc add permission . "cac20258F0E4ABBnTxwi"
90
+
91
+ # 直接指定用户ID进行分配(多个用户用空格分隔)
92
+ cc add permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT" "0052026C0A60504jNcbV"
93
+ ```
94
+
95
+ **交互式选择模式:**
96
+
97
+ 如果不指定 userIds,命令会进入交互式选择模式,展示所有可用用户供选择:
98
+
99
+ ```
100
+ ? 请选择要分配的用户(使用空格键选择,回车确认): (Press <space> to select, <a> to toggle all, <i> to invert selection)
101
+ ❯◯ 张三 (zhangsan@example.com) - 00520260C00C6FEfsMnT
102
+ ◯ 李四 (lisi@example.com) - 0052026C0A60504jNcbV
103
+ ◯ 王五 (wangwu@example.com) - 0052026D0A60504jNcbW
104
+ ```
105
+
106
+ ### 删除分配用户
107
+
108
+ ```bash
109
+ cc remove permission <path> <permsetId> [userIds...]
110
+ ```
111
+
112
+ **参数说明:**
113
+ - `path` - 项目路径(可选,默认为当前目录)
114
+ - `permsetId` - 权限集ID(必需)
115
+ - `userIds` - 要移除的用户ID列表(可选,不传则进入交互式选择)
116
+
117
+ **示例:**
118
+
119
+ ```bash
120
+ # 交互式选择用户进行移除
121
+ cc remove permission . "cac20258F0E4ABBnTxwi"
122
+
123
+ # 直接指定用户ID进行移除(多个用户用空格分隔)
124
+ cc remove permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT" "0052026C0A60504jNcbV"
125
+ ```
126
+
127
+ **交互式选择模式:**
128
+
129
+ 如果不指定 userIds,命令会进入交互式选择模式,展示当前已分配的用户供选择:
130
+
131
+ ```
132
+ ? 请选择要删除的用户(使用空格键选择,回车确认): (Press <space> to select, <a> to toggle all, <i> to invert selection)
133
+ ❯◯ 张三 (zhangsan@example.com) - 00520260C00C6FEfsMnT
134
+ ◯ 李四 (lisi@example.com) - 0052026C0A60504jNcbV
135
+
136
+ ? 确定要从权限集中移除 2 个用户吗? (y/N)
137
+ ```
138
+
139
+ ## 完整使用流程示例
140
+
141
+ ```bash
142
+ # 1. 查看所有权限集
143
+ cc get permission .
144
+
145
+ # 2. 查看某个权限集的已分配用户
146
+ cc assign permission . "cac20258F0E4ABBnTxwi"
147
+
148
+ # 3. 为权限集添加用户(交互式选择)
149
+ cc add permission . "cac20258F0E4ABBnTxwi"
150
+
151
+ # 4. 再次查看已分配用户,确认添加成功
152
+ cc assign permission . "cac20258F0E4ABBnTxwi"
153
+
154
+ # 5. 移除某些用户(交互式选择)
155
+ cc remove permission . "cac20258F0E4ABBnTxwi"
156
+ ```
157
+
158
+ ## 数据结构
159
+
160
+ ### 权限集对象
161
+
162
+ ```json
163
+ {
164
+ "name": "古语云",
165
+ "licence": "CloudCC 用户",
166
+ "id": "cac20258F0E4ABBnTxwi",
167
+ "sysadmin": "0"
168
+ }
169
+ ```
170
+
171
+ **字段说明:**
172
+ - `name` - 权限集名称
173
+ - `licence` - 许可证类型
174
+ - `id` - 权限集唯一标识
175
+ - `sysadmin` - 是否为系统管理员权限("1"表示是,"0"表示否)
176
+
177
+ ### 用户对象
178
+
179
+ ```json
180
+ {
181
+ "loginname": "421865903teet@qq.com",
182
+ "profileid": "aaa000002",
183
+ "rolename": "青青草原艾艾合作伙伴用户",
184
+ "roleid": "2026A3D78466C42UokMO",
185
+ "profilename": "Cloudcc Partner 简档",
186
+ "name": "我重新注册",
187
+ "alias": null,
188
+ "id": "00520263DB1540FTPmXK"
189
+ }
190
+ ```
191
+
192
+ **字段说明:**
193
+ - `id` - 用户唯一标识
194
+ - `name` - 用户姓名
195
+ - `loginname` - 登录名(邮箱)
196
+ - `profilename` - 简档名称
197
+ - `profileid` - 简档ID
198
+ - `rolename` - 角色名称
199
+ - `roleid` - 角色ID
200
+ - `alias` - 别名
@@ -0,0 +1,107 @@
1
+ const chalk = require('chalk');
2
+ const { postClass } = require("../../utils/http");
3
+ const { getPackageJson } = require("../../utils/config");
4
+
5
+ /**
6
+ * 获取权限集视图ID
7
+ * @param {Object} config - 项目配置
8
+ * @returns {Promise<string>} 视图ID
9
+ */
10
+ async function getPermsetViewId(config) {
11
+ const res = await postClass(
12
+ config.setupSvc + "/api/permissionGroup/queryPermsetsList",
13
+ {},
14
+ config.accessToken
15
+ );
16
+
17
+ if (res && res.result && res.data) {
18
+ // 优先使用返回的 viewId
19
+ if (res.data.viewId) {
20
+ return res.data.viewId;
21
+ }
22
+ // 否则使用 viewList 中的第一个
23
+ if (Array.isArray(res.data.viewList) && res.data.viewList.length > 0) {
24
+ return res.data.viewList[0].id;
25
+ }
26
+ }
27
+
28
+ throw new Error("未找到权限集视图");
29
+ }
30
+
31
+ /**
32
+ * 获取权限集列表
33
+ * 用法:cc get permission <projectPath> [viewId] [page] [pageSize] [searchKeyWord]
34
+ * @param {Array} argvs - 命令行参数数组
35
+ * @param {boolean} isMcp - 是否为MCP模式
36
+ * @returns {Promise<Array>} 权限集列表
37
+ */
38
+ async function get(argvs, isMcp = false) {
39
+ try {
40
+ const projectPath = argvs[2] || process.cwd();
41
+ const viewId = argvs[3] || '';
42
+ const page = parseInt(argvs[4]) || 1;
43
+ const pageSize = parseInt(argvs[5]) || 100000;
44
+ const searchKeyWord = argvs[6] || '';
45
+
46
+ const config = await getPackageJson(projectPath);
47
+
48
+ // 如果没有指定 viewId,先获取视图ID
49
+ let finalViewId = viewId;
50
+ if (!finalViewId) {
51
+ try {
52
+ finalViewId = await getPermsetViewId(config);
53
+ } catch (error) {
54
+ console.error(chalk.yellow("Warning: " + error.message));
55
+ throw error;
56
+ }
57
+ }
58
+
59
+ const res = await postClass(
60
+ config.setupSvc + "/api/permissionGroup/listAJAX",
61
+ {
62
+ viewId: finalViewId,
63
+ page: page,
64
+ pageSize: pageSize,
65
+ searchKeyWord: searchKeyWord
66
+ },
67
+ config.accessToken
68
+ );
69
+
70
+ if (res && res.result && res.data) {
71
+ const list = res.data.list || [];
72
+
73
+ if (!isMcp) {
74
+ if (list.length === 0) {
75
+ console.log(chalk.yellow("未找到权限集"));
76
+ } else {
77
+ console.log(chalk.green(`找到 ${list.length} 个权限集:`));
78
+ console.log();
79
+ // 表格形式输出
80
+ const idWidth = Math.max(20, ...list.map(item => item.id?.length || 0));
81
+ const nameWidth = Math.max(15, ...list.map(item => item.name?.length || 0));
82
+
83
+ console.log(chalk.cyan(` ${'ID'.padEnd(idWidth)} ${'名称'.padEnd(nameWidth)} 许可证 系统管理员`));
84
+ console.log(chalk.cyan(` ${'-'.repeat(idWidth)} ${'-'.repeat(nameWidth)} ---------------- ----------`));
85
+
86
+ list.forEach(item => {
87
+ const sysAdminStr = item.sysadmin === '1' ? '是' : '否';
88
+ console.log(` ${(item.id || '').padEnd(idWidth)} ${(item.name || '').padEnd(nameWidth)} ${(item.licence || '').padEnd(16)} ${sysAdminStr}`);
89
+ });
90
+ console.log();
91
+ }
92
+ }
93
+ return list;
94
+ }
95
+
96
+ const msg = res && (res.returnInfo || res.message) ? (res.returnInfo || res.message) : "Unknown error";
97
+ throw new Error("获取权限集列表失败: " + msg);
98
+
99
+ } catch (error) {
100
+ if (!isMcp) {
101
+ console.error(chalk.red("Error: " + error.message));
102
+ }
103
+ throw error;
104
+ }
105
+ }
106
+
107
+ module.exports = get;
@@ -0,0 +1,10 @@
1
+ const cc = {}
2
+ cc.get = require("./get")
3
+ cc.assign = require("./assign")
4
+ cc.add = require("./add")
5
+ cc.remove = require("./remove")
6
+ async function main(action, argvs) {
7
+ await cc[action](argvs)
8
+ }
9
+
10
+ module.exports = main;