Files
nestjs-admin/server/src/modules/system/permission/permission.service.ts
2025-03-12 11:38:34 +08:00

53 lines
1.4 KiB
TypeScript

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 })),
});
}
});
}
}