refactor: 系统权限模块重构,迁移至PostgreSQL并对齐新设计
- 切换数据库为PostgreSQL,更新依赖与配置 - 重构权限体系,使用sys_user/sys_role/sys_menu等新实体替代旧模型 - 移除旧的用户角色/权限/系统设置相关代码与实体 - 新增字典、菜单管理模块与基础CRUD接口 - 优化鉴权逻辑,基于菜单权限标识进行接口校验 - 前端同步更新API、路由与权限控制逻辑 - 删除冗余的v-permission指令与相关代码
This commit is contained in:
1 parent
98c22f6afb
commit
0a8103f33d
67 files changed
+3263
-1924
No files matched your search
@@ -0,0 +1,158 @@
|
||||
import { Provide } from "@midwayjs/core";
|
||||
import { InjectRepository } from "@midwayjs/sequelize";
|
||||
import SysMenu from "../entity/sysMenu.entity";
|
||||
|
||||
@Provide()
|
||||
export class MenuService {
|
||||
@InjectRepository(SysMenu)
|
||||
menuModel!: typeof SysMenu;
|
||||
|
||||
async getMenuTree(): Promise<any> {
|
||||
const menus = await this.menuModel.findAll({
|
||||
order: [["sort_order", "ASC"], ["id", "ASC"]],
|
||||
});
|
||||
|
||||
const tree = this.buildMenuTree(menus.map(menu => menu.toJSON()));
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: "获取菜单树成功",
|
||||
data: tree,
|
||||
};
|
||||
}
|
||||
|
||||
async create(data: any): Promise<any> {
|
||||
const {
|
||||
parentId,
|
||||
menuName,
|
||||
menuPath,
|
||||
component,
|
||||
icon,
|
||||
sortOrder = 0,
|
||||
menuType = 2,
|
||||
permission,
|
||||
visible = 1,
|
||||
} = data;
|
||||
|
||||
if (!menuName) {
|
||||
return {
|
||||
code: 400,
|
||||
message: "菜单名称不能为空",
|
||||
data: null,
|
||||
};
|
||||
}
|
||||
|
||||
const menu = await this.menuModel.create({
|
||||
parent_id: parentId,
|
||||
menu_name: menuName,
|
||||
menu_path: menuPath,
|
||||
component,
|
||||
icon,
|
||||
sort_order: sortOrder,
|
||||
menu_type: menuType,
|
||||
permission,
|
||||
visible,
|
||||
});
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: "创建菜单成功",
|
||||
data: menu,
|
||||
};
|
||||
}
|
||||
|
||||
async update(id: string, data: any): Promise<any> {
|
||||
const menu = await this.menuModel.findByPk(Number(id));
|
||||
|
||||
if (!menu) {
|
||||
return {
|
||||
code: 404,
|
||||
message: "菜单不存在",
|
||||
data: null,
|
||||
};
|
||||
}
|
||||
|
||||
const updateData: any = {};
|
||||
if (data.parentId !== undefined) updateData.parent_id = data.parentId;
|
||||
if (data.menuName !== undefined) updateData.menu_name = data.menuName;
|
||||
if (data.menuPath !== undefined) updateData.menu_path = data.menuPath;
|
||||
if (data.component !== undefined) updateData.component = data.component;
|
||||
if (data.icon !== undefined) updateData.icon = data.icon;
|
||||
if (data.sortOrder !== undefined) updateData.sort_order = data.sortOrder;
|
||||
if (data.menuType !== undefined) updateData.menu_type = data.menuType;
|
||||
if (data.permission !== undefined) updateData.permission = data.permission;
|
||||
if (data.visible !== undefined) updateData.visible = data.visible;
|
||||
|
||||
await menu.update(updateData);
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: "更新菜单成功",
|
||||
data: menu,
|
||||
};
|
||||
}
|
||||
|
||||
async remove(id: string): Promise<any> {
|
||||
const menu = await this.menuModel.findByPk(Number(id));
|
||||
|
||||
if (!menu) {
|
||||
return {
|
||||
code: 404,
|
||||
message: "菜单不存在",
|
||||
data: null,
|
||||
};
|
||||
}
|
||||
|
||||
const childCount = await this.menuModel.count({
|
||||
where: { parentId: Number(id) },
|
||||
});
|
||||
|
||||
if (childCount > 0) {
|
||||
return {
|
||||
code: 400,
|
||||
message: "存在子菜单,无法删除",
|
||||
data: null,
|
||||
};
|
||||
}
|
||||
|
||||
await menu.destroy();
|
||||
|
||||
return {
|
||||
code: 200,
|
||||
message: "删除菜单成功",
|
||||
data: null,
|
||||
};
|
||||
}
|
||||
|
||||
private buildMenuTree(menus: any[]): any[] {
|
||||
const map = new Map<number, any>();
|
||||
const tree: any[] = [];
|
||||
|
||||
for (const menu of menus) {
|
||||
map.set(menu.id, {
|
||||
id: menu.id,
|
||||
parentId: menu.parentId,
|
||||
menuName: menu.menuName,
|
||||
menuPath: menu.menuPath,
|
||||
component: menu.component,
|
||||
icon: menu.icon,
|
||||
sortOrder: menu.sortOrder,
|
||||
menuType: menu.menuType,
|
||||
permission: menu.permission,
|
||||
visible: menu.visible,
|
||||
children: [],
|
||||
});
|
||||
}
|
||||
|
||||
for (const menu of menus) {
|
||||
const node = map.get(menu.id)!;
|
||||
if (menu.parentId && map.has(menu.parentId)) {
|
||||
map.get(menu.parentId)!.children.push(node);
|
||||
} else {
|
||||
tree.push(node);
|
||||
}
|
||||
}
|
||||
|
||||
return tree;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user