import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { UserRole } from '../users/enums/user-role.enum'; import { AuthUser } from '../auth/interfaces/auth-user.interface'; import { UserPermission } from './entities/user-permission.entity'; @Injectable() export class AuthorizationService { constructor( @InjectRepository(UserPermission) private readonly userPermissionsRepository: Repository, ) {} async loadPermissions(userId: string): Promise { const userPermissions = await this.userPermissionsRepository.find({ where: { userId }, relations: { permission: true }, }); return userPermissions.map((up) => up.permission.code); } hasPermission(user: AuthUser, code: string): boolean { return user.permissions.includes(code); } isAdmin(user: AuthUser): boolean { return user.role === UserRole.ADMIN; } }