cloudcc-cli 2.3.3 → 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.
- package/.claude/settings.json +28 -1
- package/.cursor/skills/cloudcc-cli-dev/SKILL.md +175 -0
- package/.cursor/skills/cloudcc-dev-skill/SKILL.md +71 -0
- package/README.md +65 -7
- package/bin/cc.js +106 -28
- package/bin/index.js +54 -53
- package/mcp/cliRunner.js +11 -4
- package/mcp/index.js +12 -2
- package/mcp/tools/CloudCC Development Overview/handler.js +1 -1
- package/mcp/tools/JSP Migrator/handler.js +46 -0
- package/package.json +4 -5
- package/src/button/create.js +169 -0
- package/src/button/delete.js +35 -0
- package/src/button/doc.js +36 -0
- package/src/button/docs/devguide.md +133 -0
- package/src/button/docs/introduction.md +60 -0
- package/src/button/get.js +60 -0
- package/src/button/index.js +20 -0
- package/src/classes/docs/introduction.md +0 -20
- package/src/fields/create.js +12 -0
- package/src/identityProvider/create.js +78 -0
- package/src/identityProvider/delete.js +61 -0
- package/src/identityProvider/doc.js +46 -0
- package/src/identityProvider/docs/devguide.md +107 -0
- package/src/identityProvider/docs/introduction.md +31 -0
- package/src/identityProvider/download.js +105 -0
- package/src/identityProvider/get.js +70 -0
- package/src/identityProvider/index.js +12 -0
- package/src/menu/create-object.js +1 -0
- package/src/menu/create-page.js +1 -0
- package/src/menu/create-script.js +1 -0
- package/src/menu/create-site.js +1 -0
- package/src/object/create.js +2 -1
- package/src/object/docs/devguide.md +1 -5
- package/src/permission/add.js +164 -0
- package/src/permission/assign.js +84 -0
- package/src/permission/docs/devguide.md +238 -0
- package/src/permission/docs/introduction.md +200 -0
- package/src/permission/get.js +107 -0
- package/src/permission/index.js +10 -0
- package/src/permission/remove.js +145 -0
- package/src/project/docs/devguide.md +7 -6
- package/src/role/create.js +2 -1
- package/src/role/delete.js +1 -0
- package/src/singleSignOn/delete.js +61 -0
- package/src/singleSignOn/doc.js +46 -0
- package/src/singleSignOn/docs/devguide.md +61 -0
- package/src/singleSignOn/docs/introduction.md +3 -0
- package/src/singleSignOn/get.js +70 -0
- package/src/singleSignOn/index.js +10 -0
- package/src/staticResource/docs/introduction.md +44 -1
- package/src/user/create.js +502 -19
- package/src/validationRule/create.js +153 -0
- package/src/validationRule/delete.js +60 -0
- package/src/validationRule/doc.js +46 -0
- package/src/validationRule/docs/devguide.md +76 -0
- package/src/validationRule/docs/introduction.md +122 -0
- package/src/validationRule/get.js +47 -0
- package/src/validationRule/index.js +10 -0
- package/src/version/actionHelp.js +25 -0
- package/src/version/docs.js +26 -0
- package/src/version/doctor.js +25 -0
- package/src/version/get.js +7 -1
- package/src/version/help.js +47 -0
- package/src/version/index.js +9 -2
- package/src/version/initHelp.js +13 -0
- package/src/version/listModuleCommands.js +241 -0
- package/src/version/stats.js +44 -0
- package/src/version/uninstall.js +30 -0
- package/src/version/update.js +13 -0
- package/utils/checkVersion.js +31 -2
- package/utils/commandStats.js +94 -0
- package/utils/formatReleaseNotes.js +312 -0
- package/utils/readmeReleases.js +69 -0
- package/.cloudcc-cache.json +0 -38
- package/.cursor/skills/cloudcc-cli-dev.zip +0 -0
- package/.cursor/skills/cloudcc-cli-usage/SKILL.md +0 -68
- package/build/component-CCPlugin1774500425584.common.js +0 -831
- package/build/component-CCPlugin1774500425584.common.js.map +0 -1
- package/build/component-CCPlugin1774500425584.css +0 -1
- package/build/component-CCPlugin1774500425584.umd.js +0 -874
- package/build/component-CCPlugin1774500425584.umd.js.map +0 -1
- package/build/component-CCPlugin1774500425584.umd.min.js +0 -8
- package/build/component-CCPlugin1774500425584.umd.min.js.map +0 -1
- package/build/demo.html +0 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const { postClass } = require("../../utils/http");
|
|
3
|
+
const { getPackageJson } = require("../../utils/config");
|
|
4
|
+
const inquirer = require('inquirer');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 获取用户视图ID
|
|
8
|
+
* @param {Object} config - 项目配置
|
|
9
|
+
* @returns {Promise<string>} 视图ID
|
|
10
|
+
*/
|
|
11
|
+
async function getUserViewId(config) {
|
|
12
|
+
const res = await postClass(
|
|
13
|
+
config.setupSvc + "/api/usermange/queryUser",
|
|
14
|
+
{},
|
|
15
|
+
config.accessToken
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
if (res && res.result && res.data) {
|
|
19
|
+
// 优先使用返回的 viewId
|
|
20
|
+
if (res.data.viewId) {
|
|
21
|
+
return res.data.viewId;
|
|
22
|
+
}
|
|
23
|
+
// 否则使用 viewList 中的第一个
|
|
24
|
+
if (Array.isArray(res.data.viewList) && res.data.viewList.length > 0) {
|
|
25
|
+
return res.data.viewList[0].id;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
throw new Error("未找到用户视图");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 查询可选用户列表
|
|
34
|
+
* @param {Object} config - 项目配置
|
|
35
|
+
* @param {string} viewId - 视图ID
|
|
36
|
+
* @param {string} keyword - 搜索关键词
|
|
37
|
+
* @returns {Promise<Array>} 用户列表
|
|
38
|
+
*/
|
|
39
|
+
async function queryUserList(config, viewId, keyword = '') {
|
|
40
|
+
const res = await postClass(
|
|
41
|
+
config.setupSvc + "/api/usermange/queryUserList",
|
|
42
|
+
{
|
|
43
|
+
start: 0,
|
|
44
|
+
limit: 10000,
|
|
45
|
+
viewId: viewId,
|
|
46
|
+
keyword: keyword,
|
|
47
|
+
notisusering: "true"
|
|
48
|
+
},
|
|
49
|
+
config.accessToken
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
if (res && res.result && res.data) {
|
|
53
|
+
return res.data.list || [];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
throw new Error("查询用户列表失败");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 添加权限集分配用户
|
|
61
|
+
* 用法:cc add permission <projectPath> <permsetId> [userIds...]
|
|
62
|
+
* 如果不指定 userIds,会进入交互式选择
|
|
63
|
+
* @param {Array} argvs - 命令行参数数组
|
|
64
|
+
* @param {boolean} isMcp - 是否为MCP模式
|
|
65
|
+
* @returns {Promise<Object>} 添加结果
|
|
66
|
+
*/
|
|
67
|
+
async function add(argvs, isMcp = false) {
|
|
68
|
+
try {
|
|
69
|
+
const projectPath = argvs[2] || process.cwd();
|
|
70
|
+
const permsetId = argvs[3];
|
|
71
|
+
// 从第4个参数开始是用户ID
|
|
72
|
+
let userIds = argvs.slice(4);
|
|
73
|
+
|
|
74
|
+
if (!permsetId) {
|
|
75
|
+
console.error();
|
|
76
|
+
console.error(chalk.red('Error: 缺少权限集ID'));
|
|
77
|
+
console.error('用法: cc add permission <path> <permsetId> [userId1] [userId2] ...');
|
|
78
|
+
console.error('示例:');
|
|
79
|
+
console.error(' cc add permission . "cac20258F0E4ABBnTxwi" # 交互式选择用户');
|
|
80
|
+
console.error(' cc add permission . "cac20258F0E4ABBnTxwi" "00520260C00C6FEfsMnT" # 直接指定用户ID');
|
|
81
|
+
console.error();
|
|
82
|
+
throw new Error('缺少必需参数: permsetId');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const config = await getPackageJson(projectPath);
|
|
86
|
+
|
|
87
|
+
// 如果没有指定用户ID,进入交互式选择
|
|
88
|
+
if (userIds.length === 0) {
|
|
89
|
+
console.log();
|
|
90
|
+
console.log(chalk.blue('正在获取用户列表...'));
|
|
91
|
+
|
|
92
|
+
const viewId = await getUserViewId(config);
|
|
93
|
+
const userList = await queryUserList(config, viewId);
|
|
94
|
+
|
|
95
|
+
if (userList.length === 0) {
|
|
96
|
+
console.log(chalk.yellow("没有可用的用户"));
|
|
97
|
+
return { success: false, message: "没有可用的用户" };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// 交互式选择用户
|
|
101
|
+
const choices = userList.map(user => ({
|
|
102
|
+
name: `${user.name || '未命名'} (${user.loginname || ''}) - ${user.id}`,
|
|
103
|
+
value: user.id,
|
|
104
|
+
short: user.name || user.id
|
|
105
|
+
}));
|
|
106
|
+
|
|
107
|
+
const { selectedUsers } = await inquirer.prompt([
|
|
108
|
+
{
|
|
109
|
+
type: 'checkbox',
|
|
110
|
+
name: 'selectedUsers',
|
|
111
|
+
message: '请选择要分配的用户(使用空格键选择,回车确认):',
|
|
112
|
+
choices: choices,
|
|
113
|
+
validate: (input) => input.length > 0 || '请至少选择一个用户'
|
|
114
|
+
}
|
|
115
|
+
]);
|
|
116
|
+
|
|
117
|
+
userIds = selectedUsers;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (userIds.length === 0) {
|
|
121
|
+
console.log(chalk.yellow("未选择任何用户"));
|
|
122
|
+
return { success: false, message: "未选择任何用户" };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
console.log();
|
|
126
|
+
console.log(chalk.blue(`正在为权限集 ${permsetId} 分配 ${userIds.length} 个用户...`));
|
|
127
|
+
|
|
128
|
+
const res = await postClass(
|
|
129
|
+
config.setupSvc + "/api/permissionGroup/addUsersetup",
|
|
130
|
+
{
|
|
131
|
+
id: permsetId,
|
|
132
|
+
ids: userIds.join(',')
|
|
133
|
+
},
|
|
134
|
+
config.accessToken
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
if (res && res.result) {
|
|
138
|
+
if (!isMcp) {
|
|
139
|
+
console.log();
|
|
140
|
+
console.log(chalk.green('✓ 用户分配成功'));
|
|
141
|
+
console.log(` 权限集ID: ${permsetId}`);
|
|
142
|
+
console.log(` 分配用户数: ${userIds.length}`);
|
|
143
|
+
console.log();
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
success: true,
|
|
147
|
+
permsetId: permsetId,
|
|
148
|
+
userCount: userIds.length,
|
|
149
|
+
userIds: userIds
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const msg = res && (res.returnInfo || res.message) ? (res.returnInfo || res.message) : "Unknown error";
|
|
154
|
+
throw new Error("分配用户失败: " + msg);
|
|
155
|
+
|
|
156
|
+
} catch (error) {
|
|
157
|
+
if (!isMcp) {
|
|
158
|
+
console.error(chalk.red("Error: " + error.message));
|
|
159
|
+
}
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
module.exports = add;
|
|
@@ -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` - 别名
|