32 lines
977 B
TypeScript
32 lines
977 B
TypeScript
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<UserPermission>,
|
|
) {}
|
|
|
|
async loadPermissions(userId: string): Promise<string[]> {
|
|
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;
|
|
}
|
|
}
|