UserAuthtimeController(用户管理)¶
管理企业域下的用户全生命周期:当前管理员个人信息查询、用户分页列表(按关键词 / 角色 / 状态 / 部门 / 自定义字段过滤)、单条用户详情、用户部门-软件-角色矩阵查询、按登录账号跨域查重、用户创建 / 更新 / 删除 / 批量废置、角色批量授权、Excel 导入导出、KM 角色配置、个人资料与密码修改。
- 类级基址:
${myapps.context-path.manager:}/api/authtime(完整路径:{manager-context}/api/authtime<相对路径>) - Tag:用户操作模块
- 控制器源码:
obpm-manager/src/main/java/cn/myapps/manager/authtime/controller/user/UserAuthtimeController.java - 公共说明:
- 类继承
BaseAuthTimeController,通过其success(errmsg, data)/error(errcode, errmsg, errors)返回统一Resource(字段errcode/errmsg/data/errors,结构见 ../index.md「统一响应结构」)。 - 多数端点在
try/catch内捕获Exception并e.printStackTrace()后返回errcode=500、errmsg=e.getMessage()、data=null(HTTP 状态码由@ResponseStatus决定,业务异常时仍为 200/201);业务校验失败常用errcode=4001。 - 少数端点(
doList、getRoleWithDeptAndKMRelation)异常时方法体直接return null(不返回统一Resource),由 Spring 默认序列化为空响应体(HTTP 200,body 为null)。 excelExportUserAndDept返回void,直接写二进制流到响应输出流(非统一Resource)。- 鉴权说明见 index.md「鉴权说明」(adminToken JWT)。
- 路径变量
domainid/domainId为企业域 id;id/userid/userId为用户 id;departmentid为部门 id;applicationid为软件 id。
1. 获取个人信息¶
获取当前登录管理员的个人信息(id、名称、类型、级别、是否开启三员管理、密码加密模式)。开启三员管理(security.mode)时附带管理员的部门列表与企业域列表。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/myprofile(完整:{manager-context}/api/authtime/myprofile) - 鉴权:是(需管理员 adminToken,详见 index.md「鉴权说明」)
- Tag:用户操作模块
请求参数¶
无。
请求示例¶
响应¶
结构:统一 Resource(见 ../index.md「统一响应结构」)。
data:Map,字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 管理员用户 id |
| name | string | 管理员名称 |
| type | int | 管理员类型(SuperUserVO.type) |
| level | int | 管理员级别(SuperUserVO.level) |
| isOpenSecurity | boolean | 是否开启三员管理(读取全局配置 security.mode) |
| encryptionMode | string | 登录密码加密模式(读取 LoginConfig.LOGIN_PASSWORD_ENCRYPTION_MODE,缺省 0) |
| departments | array | 部门列表(仅 isOpenSecurity=true 时返回) |
| domains | array | 企业域列表(仅 isOpenSecurity=true 时返回) |
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"id": "__U001",
"name": "admin",
"type": 1,
"level": 1,
"isOpenSecurity": false,
"encryptionMode": "0"
},
"errors": null
}
throws Exception,异常由 Spring 默认异常处理(HTTP 500,无统一 Resource 体)。
2. 获取用户列表¶
按企业域分页查询用户列表,支持按关键词(searchWord,模糊匹配)、角色(roleid)、状态(status)、部门(departmentid)、排序(orderby)、自定义扩展字段(fieldExtends)过滤。响应会处理上级用户 / 代理人的循环引用,并把管理 / 接口部门 id 数组解析为部门对象列表。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/domain/{domainid}/users(完整:{manager-context}/api/authtime/domain/{domainid}/users) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainid | path | string | 是 | 企业域 id(空字符串返回 errcode=4001) |
| content | body | JSON | 是 | 过滤条件包体(字段见下) |
| currpage | query | string | 否 | 当前页码,缺省取 body 的 currpage,再缺省 1 |
| lines | query | string | 否 | 每页条数,缺省取 body 的 lines,再缺省 10 |
| departmentid | query | string | 否 | 部门 id,缺省取 body 的 departmentid |
| orderby | query | string | 否 | 排序字段,缺省取 body 的 orderby |
请求体¶
JSON 对象(application/json):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| searchWord | string | 是 | 关键词,空字符串或 "null" 视为不传 |
| roleid | string | 否 | 角色 id,空字符串或 "null" 视为不传 |
| status | int | 否 | 用户状态 |
| fieldExtends | object | 否 | 自定义字段扩展过滤(键值对 Map) |
| currpage | any | 否 | 当前页码(query 缺省时回退) |
| lines | any | 否 | 每页条数(query 缺省时回退) |
| departmentid | string | 否 | 部门 id(query 缺省时回退) |
| orderby | string | 否 | 排序字段(query 缺省时回退) |
请求示例¶
POST /api/authtime/domain/__P1UD2yVWpnFpUedONr/users?currpage=1&lines=20 HTTP/1.1
Content-Type: application/json
{
"searchWord": "admin",
"roleid": "",
"status": 1,
"fieldExtends": {}
}
响应¶
结构:统一 Resource。
data:DataPackage<UserVO>,字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| linesPerPage | int | 每页条数 |
| pageCount | int | 总页数 |
| pageNo | int | 当前页码 |
| rowCount | int | 总记录数 |
| datas | array\<UserVO> | 用户数组(每个元素的 superior、proxyUser 已替换为仅含 id/name 的精简对象,避免循环引用) |
| 条件 | errcode | errmsg | data |
|---|---|---|---|
| domainid 为空 | 4001 | 企业域不存在 |
null |
| 成功 | 0 | ok | DataPackage<UserVO> |
| 抛异常 | — | — | null(控制器 catch 后 return null,不返回统一 Resource) |
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"linesPerPage": 20,
"pageCount": 1,
"pageNo": 1,
"rowCount": 1,
"datas": [
{
"id": "__U001",
"name": "admin",
"loginno": "admin",
"status": 1,
"superior": { "id": "__U002", "name": "张三" },
"proxyUser": null
}
]
},
"errors": null
}
3. 获取指定用户¶
按用户 id 查询用户详情。响应会处理上级用户 / 代理人的循环引用。用户不存在时返回 errcode=4001。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/user/{id}(完整:{manager-context}/api/authtime/user/{id}) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| id | path | string | 是 | 用户 id |
请求示例¶
响应¶
结构:统一 Resource。
data:UserVO(superior / proxyUser 已替换为仅含 id/name 的精简对象)。
| 条件 | errcode | errmsg | data |
|---|---|---|---|
| 用户不存在 | 4001 | 用户不存在 |
null |
| 成功 | 0 | ok | UserVO |
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"id": "__U001",
"name": "admin",
"loginno": "admin",
"status": 1,
"superior": null,
"proxyUser": null
},
"errors": null
}
4. 获取指定用户的部门角色和km角色的关系¶
按用户 id 查询其「部门 → 软件 → 角色」矩阵,前端用于展示用户在各应用中各部门下的角色绑定。用户不存在时返回 errcode=4001。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/user/{userid}/rolewithdeptandkmrelation(完整:{manager-context}/api/authtime/user/{userid}/rolewithdeptandkmrelation) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| userid | path | string | 是 | 用户 id |
请求示例¶
响应¶
结构:统一 Resource。
data:JSONObject,字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| departmentdata | array\<Map> | 部门矩阵列表,元素字段见下 |
| departmentstatu | boolean | 固定为 true |
departmentdata 元素字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| departmentId | string | 部门 id |
| departmentName | string | 部门名称 |
| isDefaultDepartment | boolean | 是否为该用户的默认部门 |
| applicationData | array\<Map> | 该部门下的软件-角色绑定列表 |
applicationData 元素字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| applicationId | string | 软件 id |
| applicationName | string | 软件名称(描述为空时取 name) |
| roleData | array\<Map> | 角色列表(roleId / roleName) |
| 条件 | errcode | errmsg | data |
|---|---|---|---|
| 用户不存在 | 4001 | 用户不存在 |
null |
| 成功 | 0 | ok | 上述 JSONObject |
| 抛异常 | — | — | null(控制器 catch 后 return null,不返回统一 Resource) |
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"departmentdata": [
{
"departmentId": "__DEPT01",
"departmentName": "研发部",
"isDefaultDepartment": true,
"applicationData": [
{
"applicationId": "__APP01",
"applicationName": "协同办公",
"roleData": [ { "roleId": "__ROLE01", "roleName": "管理员" } ]
}
]
}
],
"departmentstatu": true
},
"errors": null
}
5. 根据账号获取指定用户(跨域查重)¶
按登录账号 loginNo 查询所有同名账号用户,返回第一个所属企业域与路径 domainid 不一致的用户(用于检测账号在其他域是否已被占用)。命中时返回脱敏后的用户资料;无跨域命中时返回 errcode=4001。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/domain/{domainid}/user(完整:{manager-context}/api/authtime/domain/{domainid}/user) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainid | path | string | 是 | 企业域 id(仅作排除条件) |
| loginNo | query | string | 是 | 登录账号 |
请求示例¶
响应¶
结构:统一 Resource。
data:JSONObject,字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 用户名称 |
| loginpwd | string | 解密后的登录密码(Security.decryptPassword) |
| string | 邮箱 | |
| telephone | string | 手机号 |
| telephone2 | string | 备用手机号 |
field1~field10 |
string | 10 个自定义扩展字段(field11 ~ field25 源码已注释不返回) |
| 条件 | errcode | errmsg | data |
|---|---|---|---|
| 无跨域同名用户 | 4001 | 用户不存在 |
null |
| 命中跨域同名用户 | 0 | ok | 上述 JSONObject |
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"name": "管理员",
"loginpwd": "plain-password",
"email": "admin@example.com",
"telephone": "13800138000",
"telephone2": "",
"field1": "", "field2": "", "field3": "", "field4": "", "field5": "",
"field6": "", "field7": "", "field8": "", "field9": "", "field10": ""
},
"errors": null
}
6. 创建用户¶
在指定企业域下新建用户。校验上级 / 代理人不能为自身、登录账号不能为 admin、代理人起止时间合法性、密码长度(LOGIN_PASSWORD_LENGTH)与密码字符规则(checkPassWord)。密码前端做「末两位挪到前面再 BASE64 解码」的轻量混淆。成功后若域开启了企业微信代理(非 WEIXIN_PROXY_TYPE_NONE),同步推送至企业微信端。响应 HTTP 状态码为 201。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/domain/{domainid}/user(完整:{manager-context}/api/authtime/domain/{domainid}/user) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainid | path | string | 是 | 企业域 id(写入用户的 domainid 字段) |
| content | body | JSON | 是 | UserVO 序列化字段(见下) |
请求体¶
JSON 对象(application/json),关键字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| loginno | string | 是 | 登录账号(不能为 admin) |
| loginpwd | string | 否 | 登录密码(前端混淆后的 BASE64 字符串) |
| name | string | 是 | 用户名称 |
| superiorid | string | 否 | 上级用户 id(不能等于自身 id) |
| _proxyUser | string | 否 | 代理人用户 id(不能等于自身 id) |
| startProxyTime | datetime | 否 | 代理开始时间(设置代理人时必填且不得晚于结束时间) |
| endProxyTime | datetime | 否 | 代理结束时间(设置代理人时必填且不得早于当前时间) |
| _userRoleDepartmentJson | string | 否 | 用户-部门-角色绑定 JSON 数组文本(元素字段 userId/departmentId/roleId/applicationId) |
| 其他 | — | 否 | UserVO 的其他持久化字段(邮箱、电话、部门、状态、扩展字段等) |
请求示例¶
POST /api/authtime/domain/__P1UD2yVWpnFpUedONr/user HTTP/1.1
Content-Type: application/json
{
"loginno": "zhangsan",
"loginpwd": "encoded-password",
"name": "张三",
"superiorid": "__U001",
"_userRoleDepartmentJson": "[{\"departmentId\":\"__DEPT01\",\"roleId\":\"__ROLE01\",\"applicationId\":\"__APP01\"}]"
}
响应¶
结构:统一 Resource。
data:UserVO(新建并持久化后的对象,含生成的 id)。
| 条件 | errcode | errmsg | data |
|---|---|---|---|
| 上级为自身 | 4001 | 上级用户不能选择自身 |
null |
| 代理人为自身 | 4001 | 代理人用户不能选择自身 |
null |
账号为 admin |
4001 | {*[NotCanUseadminAsLoginno]*} |
null |
| 代理开始时间晚于结束时间 | 4001 | {*[page.core.calendar.overoftime]*} |
null |
| 代理结束时间早于当前时间 | 4001 | {*[cn.myapps.core.user.tip.proxyenddate_currenttime]*} |
null |
| 密码长度不足 | 4001 | {*[PasswordLengthCanNotLow]*}<N> |
null |
| 密码字符不合法 | 500 | checkPassWord 返回的提示 |
null |
| 业务校验异常 | 500 | <异常信息> |
null |
| 成功 | 0 | ok | 新建 UserVO(HTTP 201) |
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"id": "__NEWUSER001",
"name": "张三",
"loginno": "zhangsan",
"domainid": "__P1UD2yVWpnFpUedONr",
"status": 1
},
"errors": null
}
7. 更新用户 km 角色权限¶
按 roleIds × userIds × deptIds 的笛卡尔积,为一批用户在其对应部门上批量绑定 KM 角色权限。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/domain/user/role/auth(完整:{manager-context}/api/authtime/domain/user/role/auth) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| content | body | JSON | 是 | 角色授权包体(字段见下) |
请求体¶
JSON 对象(application/json):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| roleIds | string[] | 是 | KM 角色 id 数组 |
| userIds | string[] | 是 | 用户 id 数组 |
| deptIds | string[] | 是 | 部门 id 数组 |
请求示例¶
PUT /api/authtime/domain/user/role/auth HTTP/1.1
Content-Type: application/json
{
"roleIds": ["__KMROLE01"],
"userIds": ["__U001", "__U002"],
"deptIds": ["__DEPT01"]
}
响应¶
结构:统一 Resource。
data:null。
成功示例:
失败示例:8. 保存 km 角色管理¶
按 ids 列出的用户批量保存 KM 角色配置:对每个用户取其默认部门,按 kmRoleSelectItem 逗号分隔的角色 id 列表,调用 createKmUseRole 写入该用户的 KM 角色绑定。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/domain/{domainid}/savekmconfig(完整:{manager-context}/api/authtime/domain/{domainid}/savekmconfig) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainid | path | string | 是 | 企业域 id(路径变量,方法签名持有但实际逻辑未直接使用) |
| jsonObject | body | JSON | 是 | 配置包体(字段见下) |
请求体¶
JSON 对象(application/json):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| kmRoleSelectItem | string | 是 | KM 角色 id 列表(逗号分隔) |
| ids | string | 是 | 用户 id 列表(逗号分隔) |
请求示例¶
PUT /api/authtime/domain/__P1UD2yVWpnFpUedONr/savekmconfig HTTP/1.1
Content-Type: application/json
{
"kmRoleSelectItem": "__KMROLE01,__KMROLE02",
"ids": "__U001,__U002"
}
响应¶
结构:统一 Resource。
data:字符串 "保存成功"。
成功示例:
失败示例:9. 更新用户¶
更新指定用户。校验上级 / 代理人不能为自身、登录账号不能为 admin、代理人起止时间合法性、密码长度与字符规则;支持密码占位符 888888qqqq(表示沿用原密码并按当前加密模式重编码)。禁用用户(status=0)时同步把已登录的 WebUser 状态置为 99(踢下线)。成功后若域开启了企业微信代理,同步推送至企业微信端。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/domain/{domainid}/user/{id}(完整:{manager-context}/api/authtime/domain/{domainid}/user/{id}) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainid | path | string | 是 | 企业域 id |
| id | path | string | 是 | 用户 id(用作持久化依据,覆盖 body 中的 id) |
| content | body | JSON | 是 | UserVO 序列化字段(同「创建用户」) |
请求体¶
同「创建用户」请求体,但额外支持:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| loginpwd | string | 否 | 登录密码;值为 888888qqqq 时表示沿用原密码并按当前加密模式重新编码 |
请求示例¶
PUT /api/authtime/domain/__P1UD2yVWpnFpUedONr/user/__U001 HTTP/1.1
Content-Type: application/json
{
"id": "__U001",
"loginno": "zhangsan",
"loginpwd": "888888qqqq",
"name": "张三",
"status": 1
}
响应¶
结构:统一 Resource。
data:字符串 "保存成功"。
| 条件 | errcode | errmsg | data |
|---|---|---|---|
| 上级 / 代理人为自身 | 4001 | 对应提示 | null |
账号为 admin |
4001 | {*[NotCanUseadminAsLoginno]*} |
null |
| 代理时间非法 | 4001 | 对应提示 | null |
| 密码长度不足 | 4001 | {*[PasswordLengthCanNotLow]*}<N> |
null |
| 密码字符不合法 | 500 | checkPassWord 返回的提示 |
null |
| 业务校验异常 | 500 | <异常信息> |
null |
| 成功 | 0 | ok | 保存成功 |
成功示例:
失败示例:10. 删除用户¶
按用户 id 数组批量删除用户,并把对应用户的 WebUser 会话状态置为 99(踢下线)。
- 接口类型:REST 资源
- 请求方式:
DELETE - 请求路径:
/domain/{domainId}/user(完整:{manager-context}/api/authtime/domain/{domainId}/user) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainId | path | string | 是 | 企业域 id(路径变量,方法签名持有但实际逻辑未直接使用) |
| ids | body | string[] | 是 | 待删除的用户 id 数组 |
请求体¶
application/json,字符串数组:
请求示例¶
DELETE /api/authtime/domain/__P1UD2yVWpnFpUedONr/user HTTP/1.1
Content-Type: application/json
[ "__U001" ]
响应¶
结构:统一 Resource。
data:字符串 "删除成功"。
成功示例:
失败示例:11. 获取部门下的用户¶
分页查询「不属于指定部门」的用户列表(用于部门添加成员时从外部挑选)。响应结构同「获取用户列表」的 DataPackage<UserVO>(但**不**处理上级 / 代理人的循环引用)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/department/{departmentid}/users(完整:{manager-context}/api/authtime/department/{departmentid}/users) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| departmentid | path | string | 是 | 部门 id |
| currpage | query | string | 否 | 当前页码,默认 1 |
| pagelines | query | string | 否 | 每页条数,默认 10 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<UserVO>(结构同「获取用户列表」的 data)。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"linesPerPage": 20,
"pageCount": 1,
"pageNo": 1,
"rowCount": 1,
"datas": [ { "id": "__U001", "name": "admin", "loginno": "admin", "status": 1 } ]
},
"errors": null
}
12. 用 excel 导入用户和部门¶
按上传 Excel 文件路径,把用户与部门导入指定企业域。文件扩展名必须为 .xls / .xlsx,否则返回 errcode=4001。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/domain/{domainid}/user/import(完整:{manager-context}/api/authtime/domain/{domainid}/user/import) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainid | path | string | 是 | 企业域 id |
| jsonObject | body | JSON | 是 | 导入参数包体(字段见下) |
请求体¶
JSON 对象(application/json):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 上传 Excel 文件的相对路径(相对于 web 根) |
请求示例¶
POST /api/authtime/domain/__P1UD2yVWpnFpUedONr/user/import HTTP/1.1
Content-Type: application/json
{ "path": "/uploads/import/users.xlsx" }
响应¶
结构:统一 Resource。
data:JSONObject(由 DomainProcess.excelImportToDomain 返回,结构由导入逻辑决定,通常含成功 / 失败计数)。
| 条件 | errcode | errmsg | data |
|---|---|---|---|
文件非 .xls / .xlsx |
4001 | {*[core.dts.excelimport.config.cannotimport]*} |
null |
| 成功 | 0 | ok | 导入结果 JSONObject |
| 抛异常 | 500 | <异常信息> |
null |
成功示例:
失败示例:{ "errcode": 4001, "errmsg": "{*[core.dts.excelimport.config.cannotimport]*}", "data": null, "errors": null }
13. 导出用户和部门¶
把指定企业域下的全部用户与部门导出为 Excel 文件(文件名 用户列表.xls),通过响应输出流下发二进制。
- 接口类型:REST 资源(二进制流)
- 请求方式:
GET - 请求路径:
/domain/{domainid}/user/export(完整:{manager-context}/api/authtime/domain/{domainid}/user/export) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainid | path | string | 是 | 企业域 id |
请求示例¶
响应¶
- Content-Type:
appliction/excel(源码原样拼写,注意拼写) - Content-Disposition:
attachment;fileName=<URL 编码后的「用户列表.xls」> - 状态码:200(成功)
- 响应体:Excel 二进制流(无统一
Resource)
注:本端点返回
void,异常被catch吞掉后无响应体输出。
14. 给角色批量添加用户¶
按 userIds × deptIds 的笛卡尔积,把指定角色绑定到每个用户的对应部门上(已存在的绑定会跳过)。若用户原本没有默认部门,自动取笛卡尔积中第一个部门作为默认部门。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/user/batch(完整:{manager-context}/api/authtime/user/batch) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| json | body | JSON | 是 | 批量授权包体(字段见下) |
请求体¶
JSON 对象(application/json):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userIds | string[] | 是 | 用户 id 数组(非空才处理) |
| deptIds | string[] | 是 | 部门 id 数组(非空才处理) |
| roleId | string | 是 | 角色 id |
请求示例¶
POST /api/authtime/user/batch HTTP/1.1
Content-Type: application/json
{
"userIds": ["__U001", "__U002"],
"deptIds": ["__DEPT01"],
"roleId": "__ROLE01"
}
响应¶
结构:统一 Resource。
data:null。
| 条件 | errcode | errmsg | data |
|---|---|---|---|
userIds 或 deptIds 为空 |
0 | ok | null(直接跳过逻辑) |
| 成功 | 0 | ok | null |
| 抛异常 | 500 | <异常信息> |
null |
成功示例:
失败示例:15. 批量废置用户¶
把一批用户的状态置为离职(UserVO.DIMISSION),并把对应用户的 WebUser 会话状态置为 99(踢下线)。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/domain/{domainid}/user/abandonment(完整:{manager-context}/api/authtime/domain/{domainid}/user/abandonment) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| domainid | path | string | 是 | 企业域 id(路径变量,方法签名持有但实际逻辑未直接使用) |
| content | body | string | 是 | 用户 id 的 JSON 数组文本(JSONArray.fromObject 解析) |
请求体¶
application/json,字符串数组:
请求示例¶
PUT /api/authtime/domain/__P1UD2yVWpnFpUedONr/user/abandonment HTTP/1.1
Content-Type: application/json
[ "__U001" ]
响应¶
结构:统一 Resource。
data:字符串 "成功"。
成功示例:
失败示例:16. 更新用户信息(个人资料 / 密码)¶
当前管理员更新个人资料(姓名 / 邮箱 / 电话 / 头像),或修改登录密码(含原密码校验、二次确认、密码历史校验、密码长度与字符规则校验)。密码前端做「末两位挪到前面再 BASE64 解码」的轻量混淆。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/domain/user/{userId}/detail(完整:{manager-context}/api/authtime/domain/user/{userId}/detail) - 鉴权:是
- Tag:用户操作模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| userId | path | string | 是 | 用户 id |
| content | body | JSON | 是 | 个人资料或密码修改包体(字段见下) |
请求体¶
JSON 对象(application/json),按是否修改密码分两种形态:
形态一:修改密码(包体含 oldPassword)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| oldPassword | string | 是 | 原密码(前端混淆后的 BASE64 字符串) |
| newpassword | string | 是 | 新密码(前端混淆后的 BASE64 字符串) |
| confirmPassword | string | 是 | 二次确认新密码(前端混淆后的 BASE64 字符串) |
形态二:仅改资料(包体不含 oldPassword)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 用户名称 |
| string | 是 | 邮箱 | |
| telephone | string | 是 | 手机号 |
| avatar | string | 否 | 头像 URL |
请求示例¶
POST /api/authtime/domain/user/__U001/detail HTTP/1.1
Content-Type: application/json
{
"name": "管理员",
"email": "admin@example.com",
"telephone": "13800138000",
"avatar": "/uploads/avatar/admin.png"
}
响应¶
结构:统一 Resource。
data:null。
| 条件 | errcode | errmsg | data |
|---|---|---|---|
| 两次输入的密码不一致 | 4001 | 两次输入的密码不一致 |
null |
| 原密码错误 | 4001 | 原密码错误 |
null |
| 密码长度不足 | 4001 | 密码长度不能小于<N> |
null |
| 密码字符不合法 | 4001 | checkPassWord 返回的提示 |
null |
| 业务校验异常 | 500 | <异常信息> |
null |
| 成功 | 0 | ok | null |
成功示例:
失败示例: