import { Injectable } from '@nestjs/common'; import { GrantMenuDto } from '@/modules/system/permission/dto/grant-menu.dto'; import { PrismaService } from '@/prisma/prisma.service'; import { PermissionType } from '@/common/enum'; @Injectable() export class PermissionService { constructor(private readonly prisma: PrismaService) {} async getRoleResources(roleId: string, type: PermissionType) { const ids = await this.prisma.sysResourcePermission.findMany({ select: { resourceId: true, }, where: { permission: { sysRolePermission: { some: { roleId }, }, }, }, }); return ids.map((item) => item.resourceId); } async assignResources( roleId: string, type: PermissionType, { ids }: GrantMenuDto, ) { await this.prisma.$transaction(async (prisma) => { // 删除角色对应的权限 await prisma.sysRolePermission.deleteMany({ where: { roleId, }, }); // 通过资源id 找出所有权限id const rolePermIds = await prisma.sysResourcePermission.findMany({ select: { permissionId: true }, where: { resourceId: { in: ids } }, }); // 根据权限id 关联菜单和权限 if (rolePermIds.length > 0) { await prisma.sysRolePermission.createMany({ data: rolePermIds.map((item) => ({ ...item, roleId })), }); } }); } }