refactor: 优化权限管理与登录流程,修复细节问题

1.  调整仪表盘图标从DeviceOutlined为MonitorOutlined
2.  新增403无权访问页面与路由配置
3.  完善权限存储与路由守卫逻辑
4.  修复用户信息获取与token持久化问题
5.  补充普通管理员权限初始化与补丁脚本
6.  优化后端用户服务与认证控制器逻辑
7.  调整登录表单交互与请求流程
This commit is contained in:
andyesfly committed 2026-05-28 16:25:26 +08:00
1 parent 3d7eb12103
commit 2534723842
9 files changed
+259 -50

No files matched your search

+19 -3
View File
@@ -5,6 +5,8 @@ import { TokenUtil } from "../util/token";
import { PermissionService } from "../service/permission.service";
import { InjectRepository } from "@midwayjs/sequelize";
import User from "../entity/user.entity";
import UserRole from "../entity/userRole.entity";
import Role from "../entity/role.entity";
@Controller("/api/auth")
export class AuthController {
@@ -23,6 +25,12 @@ export class AuthController {
@InjectRepository(User)
userModel!: typeof User;
@InjectRepository(UserRole)
userRoleModel!: typeof UserRole;
@InjectRepository(Role)
roleModel!: typeof Role;
@Post("/login")
async login(@Body() body: { username: string; password: string }) {
try {
@@ -102,7 +110,14 @@ export class AuthController {
const decoded = this.tokenUtil.verifyToken(token);
const userId = decoded.userId;
const user = await this.userModel.findByPk(userId);
const user = await this.userModel.findByPk(userId, {
include: [
{
model: this.userRoleModel,
include: [this.roleModel]
}
]
});
if (!user) {
return {
code: 404,
@@ -111,6 +126,7 @@ export class AuthController {
}
const permissions = await this.permissionService.getUserPermissions(userId);
const roles = (user as any).userRoles?.map((ur: any) => ur.role?.code).filter(Boolean) || [];
return {
code: 200,
@@ -120,7 +136,7 @@ export class AuthController {
username: user.username,
nickname: user.nickname || user.username,
avatar: user.avatar,
roles: [],
roles,
permissions
}
};
@@ -131,4 +147,4 @@ export class AuthController {
};
}
}
}
}
+43 -22
View File
@@ -1,5 +1,6 @@
import { Provide, Inject } from "@midwayjs/core";
import { InjectRepository } from "@midwayjs/sequelize";
import { Repository } from "sequelize-typescript";
import User from "../entity/user.entity";
import UserRole from "../entity/userRole.entity";
import Role from "../entity/role.entity";
@@ -9,17 +10,17 @@ import { hashPassword } from "../util/crypto";
@Provide()
export class UserService {
@InjectRepository(User)
userModel!: typeof User;
userModel!: Repository<User>;
@InjectRepository(UserRole)
userRoleModel!: typeof UserRole;
userRoleModel!: Repository<UserRole>;
@InjectRepository(Role)
roleModel!: typeof Role;
roleModel!: Repository<Role>;
async list(query: { page?: number; pageSize?: number; keyword?: string; status?: number; roleId?: number }): Promise<any> {
const page = query.page || 1;
const pageSize = query.pageSize || 10;
async list(query: { page?: any; pageSize?: any; keyword?: string; status?: number; roleId?: number }): Promise<any> {
const page = Number(query.page) || 1;
const pageSize = Number(query.pageSize) || 10;
const where: any = {};
if (query.keyword) {
@@ -32,11 +33,11 @@ export class UserService {
const includeOptions: any = [
{
model: this.userRoleModel,
model: UserRole,
required: !!query.roleId,
include: [
{
model: this.roleModel,
model: Role,
where: query.roleId ? { id: query.roleId } : {},
required: !!query.roleId
}
@@ -50,14 +51,21 @@ export class UserService {
limit: pageSize,
offset: (page - 1) * pageSize,
order: [["created_at", "DESC"]],
distinct: true
distinct: true,
raw: false
});
const list = rows.map((user) => {
const u = user.toJSON();
delete u.password;
return u;
});
return {
code: 200,
message: "获取用户列表成功",
data: {
list: rows,
list,
total: count,
page: Number(page),
pageSize: Number(pageSize)
@@ -69,8 +77,8 @@ export class UserService {
const user = await this.userModel.findByPk(id, {
include: [
{
model: this.userRoleModel,
include: [this.roleModel]
model: UserRole,
include: [Role]
}
]
});
@@ -83,10 +91,13 @@ export class UserService {
};
}
const userData = user.toJSON();
delete userData.password;
return {
code: 200,
message: "获取用户详情成功",
data: user
data: userData
};
}
@@ -123,16 +134,19 @@ export class UserService {
const createdUser = await this.userModel.findByPk(user.id, {
include: [
{
model: this.userRoleModel,
include: [this.roleModel]
model: UserRole,
include: [Role]
}
]
});
const userData = createdUser!.toJSON();
delete userData.password;
return {
code: 200,
message: "创建用户成功",
data: createdUser
data: userData
};
}
@@ -168,16 +182,19 @@ export class UserService {
const updatedUser = await this.userModel.findByPk(id, {
include: [
{
model: this.userRoleModel,
include: [this.roleModel]
model: UserRole,
include: [Role]
}
]
});
const userData = updatedUser!.toJSON();
delete userData.password;
return {
code: 200,
message: "更新用户成功",
data: updatedUser
data: userData
};
}
@@ -242,10 +259,13 @@ export class UserService {
await user.update({ status });
const userData = user.toJSON();
delete userData.password;
return {
code: 200,
message: "状态更新成功",
data: user
data: userData
};
}
@@ -255,7 +275,8 @@ export class UserService {
order: [
["sort_order", "ASC"],
["created_at", "DESC"]
]
],
raw: true
});
return {
@@ -277,4 +298,4 @@ export class UserService {
await this.userRoleModel.bulkCreate(userRoles);
}
}
}