系统管理接口(sys 域)¶
📄 创建: ZCode AI 2026-08-14 · 修改: JimWb 2026-08-14
bams-apex 系统管理的 15 个 Controller。含登录认证、用户/角色/菜单/应用管理。4 个完全自定义 Controller(应用角色/角色按钮/角色菜单/用户角色关联)+ 11 个继承 EnergyBaseController。
📖 标准 CRUD 接口格式见 标准CRUD接口规范。
⚠️ 前端必读的易错点¶
- 登录接口参数是 @RequestParam(query/form),不是 JSON body
- sessionId 从响应体
data.sessionId获取,后续放请求头sessionid回传(不走 Cookie) - 没有 logout / updatePassword 的 REST 端点(service 层已实现但未暴露,登出=前端丢弃 sessionId 即可)
- assign 类接口是"全量覆盖"语义(先删该角色全部关联再插入新集合)
/sys/sysResource/exist返回 true=已存在
一、用户与登录 /dac/sysUser(前端最常用)¶
@Tag:9000-系统用户接口。继承 EnergyBaseController(标准 CRUD 全套,重写了 saveOrUpdate)。
POST /dac/sysUser/auth/loginByPassword — 登录¶
根据用户名、密码、验证码登录,创建 session 并返回用户信息。
- 参数:
@RequestParam(query 或 form-urlencoded,非 JSON)
| 参数 | 必填 | 说明 |
|---|---|---|
username |
✅ | 登录名 |
password |
✅ | 密码(RSA 加密兼容明文:后端先 RSA 解密,失败按明文比对) |
captcha |
❌ | 验证码(当前实现未参与校验) |
- 响应:
JsonResult<Object>,data = SysUser:
{
"code": "200",
"data": {
"session_id": "550e8400-e29b-41d4-a716-446655440000",
"id": "123",
"user_name": "张三",
"login_name": "zhangsan",
"role_list": [...],
"role_name": "管理员",
"role_id_list": [...],
"corp": { "公司信息 BdCorp" },
"super_admin": 0,
"password": null
}
}
- 登录失败:用户不存在/已停用(AUTH_REQUEST_ERROR)、密码错误
GET /dac/sysUser/transferToLocalUser?sessionId=xxx — 会话换换¶
跨系统/底座跳转场景:校验传入 sessionId 有效,读取用户信息,创建全新 sessionId 返回。@IgnoreSession。
POST /dac/sysUser/auth/accessToken?appId=&appKey= — 获取底座 token¶
必须精确匹配 appId=cnbmBamsDataId、appKey=ZW5lcmd5UmVnaW9u。响应 data = JWT token 字符串。
GET /dac/sysUser/getResourceByUserTree?appId=&token=&accountId=&menuType= — 获取用户菜单树¶
@CommonData。按 appId 对应应用的认证模式分两支:
- 本地认证(authenticationMode=0):按 accountId+appId 查权限资源,组树返回
- 底座认证:代理转发底座网关菜单接口(header 携带 Sys {token})
- 响应:
JsonResult<Object>(树形 SysResource 数组)
POST /dac/sysUser/saveOrUpdate — 新增/修改用户(重写)¶
- 请求:SysUser JSON。关键字段:pid(父账号)、account_type(1主/2子)、super_admin(0/1)、dept_code、login_name(唯一)、user_name、user_type、email、phone_number、sex、password、status(0正常/1停用)、corp_code、org_id、role_id_list
- 响应:
JsonResult<SysUser>
二、应用角色关联 /dac/sysAppRole(完全自定义)¶
@Tag:应用角色关联接口。关联表 sys_app_role。
| 接口 | 方法 | 参数 | 响应 | 说明 |
|---|---|---|---|---|
/dac/sysAppRole/getRoleListByAppId?appId= |
GET | appId | JsonResult<List<SysRole>> |
按应用查角色 |
/dac/sysAppRole/getAppIdListByRoleId?roleId= |
GET | roleId | JsonResult<List<String>> |
按角色查应用 ID |
/dac/sysAppRole/assignRolesToApp?appId= |
POST | Body: ["roleId1","roleId2"] |
JsonResult<Boolean> |
给应用分配角色 |
/dac/sysAppRole/assignAppsToRole?roleId= |
POST | Body: ["appId1","appId2"] |
JsonResult<Boolean> |
给角色分配应用 |
/dac/sysAppRole/deleteByAppId?appId= |
POST | appId | JsonResult<Boolean> |
删应用全部角色关联 |
/dac/sysAppRole/deleteByRoleId?roleId= |
POST | roleId | JsonResult<Boolean> |
删角色全部应用关联 |
/dac/sysAppRole/deleteBatch |
POST | Body: ["id1","id2"] |
JsonResult<Boolean> |
批量删关联 |
/dac/sysAppRole/checkRoleAppAccess?roleId=&appId= |
GET | roleId, appId | JsonResult<Boolean> |
角色是否有应用权限 |
三、角色按钮权限 /sys/roleButton(完全自定义)¶
@Tag:1202-系统角色按钮权限接口。
GET /sys/roleButton/getButtonsBySessionId?sysCode=xxx — 获取角色按钮权限(前端鉴权主接口)¶
- 认证:请求头
sessionid(从 session 解析当前用户) - 逻辑:用户→角色列表→按 sysCode+roleIds 查菜单按钮;无角色返回空列表
- 响应:
JsonResult<List<SysMenuButton>>
SysMenuButton 关键字段:
| 字段 | 说明 |
|---|---|
app_code |
底座应用编码 |
menu_code |
所属菜单编码 |
button_name / button_code |
按钮名/编码 |
auth_code |
权限编码(前端按钮显隐控制用) |
action_url |
操作 URL |
is_enable_permission |
是否启用权限 |
is_res_button |
是否资源按钮 |
其他接口¶
| 接口 | 方法 | 参数 | 响应 |
|---|---|---|---|
/sys/roleButton/buttonsByRoleId?roleId= |
GET | roleId | JsonResult<List<SysMenuButton>> |
/sys/roleButton/rolesByButtonId?buttonId= |
GET | buttonId | JsonResult<List<SysRoleButton>> |
/sys/roleButton/assign |
POST | Body: {"roleId":"xx","buttonIds":["a","b"]} |
JsonResult<Boolean>(全量覆盖) |
/sys/roleButton/unassign |
POST | 同上 | JsonResult<Boolean> |
四、角色菜单关联 /sys/roleResource(完全自定义)¶
@Tag:角色菜单关联接口。
| 接口 | 方法 | 参数 | 响应 |
|---|---|---|---|
/sys/roleResource/resourcesByRoleId?roleId= |
GET | roleId | JsonResult<List<SysResource>> |
/sys/roleResource/rolesByResId?resId= |
GET | resId | JsonResult<List<SysRoleResource>> |
/sys/roleResource/assign |
POST | Body: {"roleId":"xx","resIds":["r1","r2"]} |
JsonResult<Boolean>(全量覆盖) |
/sys/roleResource/unassign |
POST | 同上 | JsonResult<Boolean> |
五、用户角色关联 /sys/userRole(完全自定义)¶
@Tag:用户角色关联接口。
| 接口 | 方法 | 参数 | 响应 |
|---|---|---|---|
/sys/userRole/rolesByUserId?userId= |
GET | userId | JsonResult<List<SysRole>> |
/sys/userRole/usersByRoleId?roleId= |
GET | roleId | JsonResult<List<SysUser>> |
/sys/userRole/personsByRoleId?roleId= |
GET | roleId | JsonResult<List<BdPerson>>(关联到人员) |
/sys/userRole/batchSave?userId=xx |
POST | Body: ["roleId1","roleId2"] |
JsonResult<Boolean>(全量覆盖) |
/sys/userRole/batchDelete?userId=xx |
POST | Body: ["roleId1"] |
JsonResult<Boolean> |
/sys/userRole/batchBindUsers |
POST | Body: {andMap:{roleId,userIds:[...]}} |
JsonResult<Boolean>(按角色全量覆盖用户) |
/sys/userRole/batchUnBindUsers |
POST | 同上 | JsonResult<Boolean> |
六、应用管理 /dac/sysApp(继承 + 10 个自定义)¶
@Tag:应用管理接口。继承标准 CRUD。主要字段:app_name、app_code、type、sort、app_icon、open_type、is_enable、auth_mode、mobile_url、support_terminal、corp_code 等。
| 接口 | 方法 | 参数 | 响应 | 说明 |
|---|---|---|---|---|
/dac/sysApp/detail/{id} |
GET | id | JsonResult<SysApp> |
应用详情 |
/dac/sysApp/updateStatus?status=0或1 |
POST | Body: ["id1","id2"] |
JsonResult<List<SysApp>> |
批量启停 |
/dac/sysApp/getAppListByRoleId |
POST | Body: {andMap:{roleId}} |
JsonResult<List<SysApp>> |
按角色查应用(@CommonData) |
/dac/sysApp/getAppListByUserId |
POST | Body: {andMap:{userId}} |
JsonResult<List<SysApp>> |
按用户查应用(@CommonData) |
/dac/sysApp/getEnabledApps |
GET | — | JsonResult<List<SysApp>> |
所有启用应用(按 sort) |
/dac/sysApp/getAppListByUserType |
GET | — | JsonResult<List<SysApp>> |
从 sessionid 头解析用户;仅超管可见业务中台类应用 |
/dac/sysApp/getAppListByGroupId?groupId= |
GET | groupId | JsonResult<List<SysApp>> |
按分组查应用 |
/dac/sysApp/updateGroup?id=&groupId= |
POST | query | JsonResult<Boolean> |
改分组 |
/dac/sysApp/updateTags?id=&tags= |
POST | query | JsonResult<Boolean> |
改标签 |
/dac/sysApp/updateSort?id=&sort= |
POST | query | JsonResult<Boolean> |
改排序 |
七、角色管理 /sys/role(继承 + 4 个自定义)¶
@Tag:1202-角色管理接口。SysRole 关键字段:role_code(唯一)、role_name(唯一)、role_sort、data_scope(1全部/2本公司及以下/3本公司/4本部门/5本部门及以下/6仅本人)、status、corp_code。
| 接口 | 方法 | 参数 | 响应 | 说明 |
|---|---|---|---|---|
/sys/role/bindResource |
POST | Body: {andMap:{roleId, resourceList:["resId1"]}} |
JsonResult<Object> |
绑定角色资源(全量覆盖;空列表报错) |
/sys/role/roleResourceTree |
POST | Body: {andMap:{roleId}} |
JsonResult<Object> |
授权树回显:全部资源组树,节点带 checked 标记 |
/sys/role/bindApps?roleId=xx |
POST | Body: ["appId1"] |
JsonResult<Boolean> |
给角色分配应用 |
/sys/role/roleApps?roleId=xx |
GET | roleId | JsonResult<List<SysApp>> |
角色关联应用列表 |
八、资源/菜单管理 /sys/sysResource(继承 + 2 个自定义)¶
@Tag:1201-系统资源接口。SysResource 实现 ITreeAble(支持 /tree 树形接口)。关键字段:pid、menu_type(dir目录/menu菜单)、menu_code、menu_name、menu_icon、path、sort、is_hide、is_enable、open_type、app_id、checked(非表)、children(非表)。
| 接口 | 方法 | 参数 | 响应 | 说明 |
|---|---|---|---|---|
/sys/sysResource/list |
POST | BasicParamWrapper | JsonResult<Page<SysResource>> |
重写:orMap.contain="Y" 时按 andMap.pid 精确查(含子级) |
/sys/sysResource/exist |
POST | Body: SysResource(menuCode 必填) | JsonResult<Boolean> |
true=已存在 |
/sys/sysResource/tree |
POST | BasicParamWrapper | JsonResult<List<SysResource>> |
继承的树形接口,菜单树用这个 |
九、业务状态配置 /sys/businessStatus(继承 + 1 个自定义)¶
| 接口 | 方法 | 参数 | 响应 |
|---|---|---|---|
/sys/businessStatus/getByBusinessCode |
POST | Body: {appCode, corpCode, businessCode} 全必填 |
JsonResult<SysBusinessStatus>(无匹配 data=null) |
SysBusinessStatus 字段:app_code、corp_code、business_code、business_status(状态列表 JSON 串)、overdue。
十、其余标准 CRUD 模块¶
| 模块 | 前缀 | Swagger 分组 | 说明 |
|---|---|---|---|
| 资源按钮 | /sys/button |
1202-资源按钮接口 | 纯标准 CRUD。字段:button_name/button_code/category/font_color/icon 等 |
| 系统配置 | /sys/config |
1202-系统配置接口 | 纯标准 CRUD。字段:category/config_key/val/visible |
| 菜单按钮 | /sys/menuButton |
1202-系统菜单按钮权限接口 | 纯标准 CRUD |
| 系统日志 | /sys/log |
1200-系统日志接口 | 标准 CRUD + 重写 listMap(字段翻译)。字段:request_ip/request_url/cost_time 等 |
| 操作日志 | /sys/operLog |
1201-前端操作记录 | 标准 CRUD + 重写 saveOrUpdate:必填 oper_name(功能名)、request_path(功能路径),服务端自动补 oper_ip/oper_time |
| 租户数据源 | /sys/tenantDb |
1203-租户数据源配置接口 | 纯标准 CRUD。字段:tenant_code/ds_key/jdbc_url/enable_state |
十一、典型调用流程(前端登录到鉴权全流程)¶
// 1. 登录(form 参数,非 JSON!)
const res = await axios.post('/apex-api/dac/sysUser/auth/loginByPassword',
`username=zhangsan&password=${rsaEncryptedPwd}`);
const sessionId = res.data.data.sessionId;
// 2. 存 sessionId,后续请求带头
axios.defaults.headers.common['sessionid'] = sessionId;
// 3. 拉菜单树
const menus = await axios.get('/apex-api/dac/sysUser/getResourceByUserTree', {
params: { appId: 'myApp', token: '', accountId: userId }
});
// 4. 拉按钮权限(按钮显隐控制)
const buttons = await axios.get('/apex-api/sys/roleButton/getButtonsBySessionId', {
params: { sysCode: 'myApp' }
});
// buttons.data.data → [{ auth_code: 'sys:user:delete', ... }]
相关文档¶
- 标准CRUD接口规范
- 业务中台接口首页
- SDK开发包-数据权限 — dataScope 数据范围机制