跳转至

设计时特权用户管理(SuperUserController)

特权用户(开发者/设计者)设计时资源管理:查询已加入/未加入当前软件的开发者列表,添加/移除开发者(批量),获取当前登录特权用户信息,生成/清除 CLI API Key,以及修改特权用户信息。

  • 接口类型:REST 资源
  • 基址${myapps.context-path.designer:}/api/designtime/applications(类级 @RequestMappingproduces = 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=500errmsg 为异常信息。
  • 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「统一响应结构」)。 dataDataPackage<SuperUserVO>(含分页字段与 datas)。

成功示例

{
  "errcode": 0,
  "errmsg": "ok",
  "data": {
    "linesPerPage": 10,
    "pageNo": 1,
    "pageCount": 1,
    "rowCount": 2,
    "datas": [
      { "id": "...", "name": "开发者名称", "loginno": "...", "email": "...", "...": "..." }
    ]
  },
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "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

响应

dataDataPackage<SuperUserVO>(结构同「获取已加入软件的开发者列表」)。

{
  "errcode": 0,
  "errmsg": "ok",
  "data": {
    "linesPerPage": 10,
    "pageNo": 1,
    "pageCount": 1,
    "rowCount": 1,
    "datas": [ { "id": "...", "name": "...", "loginno": "...", "...": "..." } ]
  },
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "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>

请求体

["<userId1>", "<userId2>"]

响应

datanull(成功)。HTTP 状态码 201 Created

{ "errcode": 0, "errmsg": "ok", "data": null, "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


4. 移除开发者(可批量)

将一组开发者批量移出指定软件:逐个读取 SuperUserVO,从其 applications 集合中移除当前 applicationId 后更新。

  • 接口类型:REST 资源
  • 请求方式DELETE
  • 请求路径/{applicationId}/superusers
  • 鉴权:是(需 designerToken)
  • Tag:设计时-特权用户模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 软件Id
content body string(JSON) 开发者Id数组(JSON 数组字符串,由 JsonPath 解析为 List<String>

请求体

["<userId1>", "<userId2>"]

响应

datanull(成功)。

{ "errcode": 0, "errmsg": "ok", "data": null, "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


5. 获取特权用户信息

获取当前登录特权用户的个人信息(含账号、加密口令、邮箱、API Key)与当前 License 类型。该端点路径下不含 {applicationId} 段。读取异常时仍返回 errcode=0,但 data 中只包含能成功写入的字段。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/getSuperuser(完整:{designer-context}/api/designtime/applications/getSuperuser
  • 鉴权:是(需 designerToken)
  • Tag:设计时-特权用户模块

请求参数

无。

请求示例

GET /api/designtime/applications/getSuperuser HTTP/1.1

响应

dataJSONObject,结构 {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:设计时-特权用户模块

请求参数

无。

请求示例

POST /api/designtime/applications/superuser/generate-api-key HTTP/1.1

响应

dataJSONObject,仅含 apiKey

{ "errcode": 0, "errmsg": "ok", "data": { "apiKey": "<新生成的 API Key>" }, "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


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:设计时-特权用户模块

请求参数

无。

请求示例

POST /api/designtime/applications/superuser/remove-api-key HTTP/1.1

响应

dataJSONObject,仅含 apiKey(清除后通常为空字符串或 null,以实际存储为准)。

{ "errcode": 0, "errmsg": "ok", "data": { "apiKey": "" }, "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": 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 }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }