设计时特权用户管理(SuperUserController)¶
特权用户(开发者/设计者)设计时资源管理:查询已加入/未加入当前软件的开发者列表,添加/移除开发者(批量),获取当前登录特权用户信息,生成/清除 CLI API Key,以及修改特权用户信息。
- 接口类型:REST 资源
- 基址:
${myapps.context-path.designer:}/api/designtime/applications(类级@RequestMapping,produces = APPLICATION_JSON_VALUE) - Tag:设计时-特权用户模块
公共说明¶
- 鉴权:是(需 designerToken)。控制器继承自
AbstractDesignTimeController(基类为@RestController),通过Security.getDesignerIdFromToken(request)从 designerToken JWT 中解析设计器用户。鉴权机制详见 index.md「鉴权说明」。 - 路径变量:
{applicationId}、{userId}均为**明文设计时 ID**(与 designer 其他控制器一致,非 runtime 的 DES 加密密文)。 - 响应:统一
Resource(见 ../index.md「统一响应结构」)。成功errcode=0;异常默认errcode=500,errmsg为异常信息。 - HTTP 方法:受
CommonSecurityFilter限制,仅允许GET/POST/HEAD/OPTIONS。 - HTTP 状态码:添加开发者接口返回
201 Created(@ResponseStatus),其余接口200 OK;统一Resource仍以errcode表达业务结果。 - 请求体约定:添加/移除开发者接收 JSON 字符串数组(
@RequestBody String content,由 JsonPath 解析为List<String>);修改特权用户接收原始 JSON 字符串(由JSONObject.fromObject解析)。
1. 获取已加入软件的开发者列表¶
分页获取已加入指定软件的开发者列表,可按名称或账号查询。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/superusers/join(完整:{designer-context}/api/designtime/applications/{applicationId}/superusers/join) - 鉴权:是(需 designerToken)
- Tag:设计时-特权用户模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| name | query | string | 否 | 按开发者名称查询关键字 |
| loginno | query | string | 否 | 按登录账号查询关键字 |
| pageNo | query | string | 否 | 当前页数(缺省 1) |
| linesPerPage | query | string | 否 | 每页行数(缺省 10) |
请求示例¶
GET /api/designtime/applications/{applicationId}/superusers/join?name=&loginno=&pageNo=1&linesPerPage=10 HTTP/1.1
响应¶
结构:统一 Resource(见 ../index.md「统一响应结构」)。
data:DataPackage<SuperUserVO>(含分页字段与 datas)。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"linesPerPage": 10,
"pageNo": 1,
"pageCount": 1,
"rowCount": 2,
"datas": [
{ "id": "...", "name": "开发者名称", "loginno": "...", "email": "...", "...": "..." }
]
},
"errors": null
}
2. 获取未加入软件的开发者列表¶
分页获取未加入指定软件的开发者列表,可按名称或账号查询。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/superusers/unjoin - 鉴权:是(需 designerToken)
- Tag:设计时-特权用户模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| name | query | string | 否 | 按开发者名称查询关键字 |
| loginno | query | string | 否 | 按登录账号查询关键字 |
| pageNo | query | string | 否 | 当前页数(缺省 1) |
| linesPerPage | query | string | 否 | 每页行数(缺省 10) |
请求示例¶
GET /api/designtime/applications/{applicationId}/superusers/unjoin?name=&loginno=&pageNo=1&linesPerPage=10 HTTP/1.1
响应¶
data:DataPackage<SuperUserVO>(结构同「获取已加入软件的开发者列表」)。
{
"errcode": 0,
"errmsg": "ok",
"data": {
"linesPerPage": 10,
"pageNo": 1,
"pageCount": 1,
"rowCount": 1,
"datas": [ { "id": "...", "name": "...", "loginno": "...", "...": "..." } ]
},
"errors": null
}
3. 添加开发者(可批量)¶
将一组开发者批量加入指定软件:逐个读取 SuperUserVO,把 applicationId 追加到其 applications 集合后更新。开发者Id不存在时静默跳过。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/superusers - 鉴权:是(需 designerToken)
- Tag:设计时-特权用户模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| content | body | string(JSON) | 是 | 开发者Id数组(JSON 数组字符串,由 JsonPath 解析为 List<String>) |
请求体¶
响应¶
data:null(成功)。HTTP 状态码 201 Created。
4. 移除开发者(可批量)¶
将一组开发者批量移出指定软件:逐个读取 SuperUserVO,从其 applications 集合中移除当前 applicationId 后更新。
- 接口类型:REST 资源
- 请求方式:
DELETE - 请求路径:
/{applicationId}/superusers - 鉴权:是(需 designerToken)
- Tag:设计时-特权用户模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| content | body | string(JSON) | 是 | 开发者Id数组(JSON 数组字符串,由 JsonPath 解析为 List<String>) |
请求体¶
响应¶
data:null(成功)。
5. 获取特权用户信息¶
获取当前登录特权用户的个人信息(含账号、加密口令、邮箱、API Key)与当前 License 类型。该端点路径下不含 {applicationId} 段。读取异常时仍返回 errcode=0,但 data 中只包含能成功写入的字段。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/getSuperuser(完整:{designer-context}/api/designtime/applications/getSuperuser) - 鉴权:是(需 designerToken)
- Tag:设计时-特权用户模块
请求参数¶
无。
请求示例¶
响应¶
data:JSONObject,结构 {id, name, loginno, loginpwd, email, license, apiKey}。其中 loginpwd 为数据库中存储的加密口令,license 取自 Environment.licenseType(如 S.标准版)。
{
"errcode": 0,
"errmsg": "ok",
"data": {
"id": "...",
"name": "开发者名称",
"loginno": "admin",
"loginpwd": "<加密口令>",
"email": "user@example.com",
"license": "S.标准版",
"apiKey": "<CLI API Key>"
},
"errors": null
}
6. 生成 CLI API Key¶
为当前登录的特权用户生成新的 CLI API Key(旧 Key 立即失效),供 CLI 等自动化工具使用。该端点路径下不含 {applicationId} 段。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/superuser/generate-api-key(完整:{designer-context}/api/designtime/applications/superuser/generate-api-key) - 鉴权:是(需 designerToken)
- Tag:设计时-特权用户模块
请求参数¶
无。
请求示例¶
响应¶
data:JSONObject,仅含 apiKey。
7. 清除 CLI API Key¶
清除当前登录特权用户的 CLI API Key;清除后 CLI 等自动化工具需重新生成方可使用。该端点路径下不含 {applicationId} 段。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/superuser/remove-api-key(完整:{designer-context}/api/designtime/applications/superuser/remove-api-key) - 鉴权:是(需 designerToken)
- Tag:设计时-特权用户模块
请求参数¶
无。
请求示例¶
响应¶
data:JSONObject,仅含 apiKey(清除后通常为空字符串或 null,以实际存储为准)。
8. 修改特权用户信息¶
按用户Id修改特权用户信息(名称、邮箱、登录账号、API Key、登录口令)。请求体内的 id 不参与更新,以路径变量 {userId} 为准。当 loginpwd 等于前端默认占位(Web.DEFAULT_SHOWPASSWORD)时不修改原口令;否则用 Security.encryptPassword 加密后入库。最终调用 doPersonalUpdate 执行个人化更新。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/superuser/{userId}(完整:{designer-context}/api/designtime/applications/superuser/{userId}) - 鉴权:是(需 designerToken)
- Tag:设计时-特权用户模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| userId | path | string | 是 | 待修改的特权用户Id |
| content | body | string(JSON) | 是 | 特权用户对象 JSON |
请求体¶
{
"name": "<新名称>",
"email": "<新邮箱>",
"loginno": "<新登录账号>",
"apiKey": "<API Key>",
"loginpwd": "<明文口令或前端占位>"
}
响应¶
data:更新后的 SuperUserVO 完整对象。
{ "errcode": 0, "errmsg": "ok", "data": { "id": "...", "name": "...", "loginno": "...", "email": "...", "...": "..." }, "errors": null }