feat: 调整项目层级
This commit is contained in:
45
server/src/modules/system/permission/permission.service.ts
Normal file
45
server/src/modules/system/permission/permission.service.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { GrantMenuDto } from '@/modules/system/permission/dto/grant-menu.dto';
|
||||
import { PrismaService } from '@/prisma/prisma.service';
|
||||
|
||||
@Injectable()
|
||||
export class PermissionService {
|
||||
constructor(private readonly prisma: PrismaService) {}
|
||||
|
||||
async getMenu(id: number) {
|
||||
const menuIds = await this.prisma.sysMenuPermission.findMany({
|
||||
select: {
|
||||
menuId: true,
|
||||
},
|
||||
where: {
|
||||
permission: {
|
||||
sysRolePermission: {
|
||||
some: { roleId: id },
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return menuIds.map((item) => item.menuId);
|
||||
}
|
||||
|
||||
async grantMenu(id: number, { menuIds }: GrantMenuDto) {
|
||||
await this.prisma.$transaction(async (prisma) => {
|
||||
// 删除角色对应的权限
|
||||
await prisma.sysRolePermission.deleteMany({
|
||||
where: { roleId: id },
|
||||
});
|
||||
// 通过菜单id 找出所有权限id
|
||||
const rolePermIds = await prisma.sysMenuPermission.findMany({
|
||||
select: { permissionId: true },
|
||||
where: { menuId: { in: menuIds } },
|
||||
});
|
||||
// 根据权限id 关联菜单和权限
|
||||
if (rolePermIds.length > 0) {
|
||||
await prisma.sysRolePermission.createMany({
|
||||
data: rolePermIds.map((item) => ({ ...item, roleId: id })),
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user