Files
certd/packages/ui/certd-server/src/controller/sys/authority/user-controller.ts
T

187 lines
4.9 KiB
TypeScript
Raw Normal View History

2026-05-31 01:41:33 +08:00
import { Provide, Controller, Post, Inject, Body, Query, ALL } from "@midwayjs/core";
import { UserService } from "../../../modules/sys/authority/service/user-service.js";
import { CrudController } from "@certd/lib-server";
import { RoleService } from "../../../modules/sys/authority/service/role-service.js";
import { PermissionService } from "../../../modules/sys/authority/service/permission-service.js";
import { Constants } from "@certd/lib-server";
import { In } from "typeorm";
import { LoginService } from "../../../modules/login/service/login-service.js";
2026-07-12 02:29:54 +08:00
import { AuditType } from "../../../modules/sys/enterprise/service/audit-constants.js";
/**
* 系统用户
*/
@Provide()
2026-05-31 01:41:33 +08:00
@Controller("/api/sys/authority/user")
export class UserController extends CrudController<UserService> {
@Inject()
service: UserService;
@Inject()
roleService: RoleService;
@Inject()
permissionService: PermissionService;
@Inject()
loginService: LoginService;
2026-07-12 02:29:54 +08:00
getAuditType(): string {
return AuditType.user;
}
getService() {
return this.service;
}
2026-05-31 01:41:33 +08:00
@Post("/getSimpleUserByIds", { description: "sys:auth:user:view" })
async getSimpleUserByIds(@Body("ids") ids: number[]) {
2024-12-24 01:12:12 +08:00
const users = await this.service.find({
select: {
id: true,
username: true,
nickName: true,
mobile: true,
phoneCode: true,
},
where: {
id: In(ids),
},
});
return this.ok(users);
}
2026-05-31 01:41:33 +08:00
@Post("/getSimpleUsers", { description: "sys:auth:user:view" })
2026-02-04 18:54:00 +08:00
async getSimpleUsers() {
const users = await this.service.find({
select: {
id: true,
username: true,
nickName: true,
mobile: true,
phoneCode: true,
},
});
return this.ok(users);
}
2026-05-31 01:41:33 +08:00
@Post("/page", { description: "sys:auth:user:view" })
async page(
@Body(ALL)
2026-05-31 01:41:33 +08:00
body
) {
const ret = await super.page(body);
const users = ret.data.records;
//获取roles
2023-06-25 23:25:56 +08:00
const userIds = users.map(item => item.id);
const userRoles = await this.roleService.getByUserIds(userIds);
const userRolesMap = new Map();
for (const ur of userRoles) {
let roles = userRolesMap.get(ur.userId);
if (roles == null) {
roles = [];
userRolesMap.set(ur.userId, roles);
}
roles.push(ur.roleId);
}
for (const record of users) {
//withRoles
record.roles = userRolesMap.get(record.id);
//删除密码字段
delete record.password;
}
return ret;
}
2026-07-12 02:29:54 +08:00
@Post("/add", { description: "sys:auth:user:add", summary: "新增用户" })
async add(
@Body(ALL)
2026-05-31 01:41:33 +08:00
bean
) {
2026-07-10 19:24:42 +08:00
const res = await super.add(bean);
await this.auditLog({
content: `新增了用户「${bean.username}」(ID:${res.data})`,
});
return res;
}
2026-07-12 02:29:54 +08:00
@Post("/update", { description: "sys:auth:user:edit", summary: "修改用户" })
async update(
@Body(ALL)
2026-05-31 01:41:33 +08:00
bean
) {
2026-07-10 19:24:42 +08:00
const res = await super.update(bean);
await this.auditLog({
content: `修改了用户「${bean.username}」(ID:${bean.id})`,
});
return res;
}
2026-07-12 02:29:54 +08:00
@Post("/delete", { description: "sys:auth:user:remove", summary: "删除用户" })
async delete(
2026-05-31 01:41:33 +08:00
@Query("id")
id: number
) {
2024-10-03 01:29:12 +08:00
if (id === 1) {
2026-05-31 01:41:33 +08:00
throw new Error("不能删除默认的管理员角色");
2024-10-15 12:03:37 +08:00
}
if (id === 3) {
2026-05-31 01:41:33 +08:00
throw new Error("不能删除默认的普通用户角色");
2024-10-03 01:29:12 +08:00
}
2026-07-10 19:24:42 +08:00
const res = await super.delete(id);
await this.auditLog({
content: `删除了用户(ID:${id})`,
});
return res;
}
/**
* 解除登录锁定
*/
2026-07-12 02:29:54 +08:00
@Post("/unlockBlock", { description: "sys:auth:user:edit", summary: "解锁登录锁定" })
2026-05-31 01:41:33 +08:00
public async unlockBlock(@Body("id") id: number) {
const info = await this.service.info(id, ["password"]);
this.loginService.clearCacheOnSuccess(info.username);
if (info.mobile) {
2026-05-31 01:41:33 +08:00
this.loginService.clearCacheOnSuccess(info.mobile);
}
2026-07-12 02:29:54 +08:00
await this.auditLog({ content: `解锁了用户登录锁定(ID:${id})` });
return this.ok(info);
}
/**
* 当前登录用户的个人信息
*/
2026-05-31 01:41:33 +08:00
@Post("/mine", { description: Constants.per.authOnly })
public async mine() {
2024-10-10 02:15:05 +08:00
const id = this.getUserId();
2026-05-31 01:41:33 +08:00
const info = await this.service.info(id, ["password"]);
return this.ok(info);
}
/**
* 当前登录用户的权限列表
*/
2026-05-31 01:41:33 +08:00
@Post("/permissions", { description: Constants.per.authOnly })
public async permissions() {
2024-10-10 02:15:05 +08:00
const id = this.getUserId();
const permissions = await this.service.getUserPermissions(id);
return this.ok(permissions);
}
/**
* 当前登录用户的权限树形列表
*/
2026-05-31 01:41:33 +08:00
@Post("/permissionTree", { description: Constants.per.authOnly })
public async permissionTree() {
2024-10-10 02:15:05 +08:00
const id = this.getUserId();
const permissions = await this.service.getUserPermissions(id);
const tree = this.permissionService.buildTree(permissions);
return this.ok(tree);
}
}