pos-be/src/core/guards/domain/roles.guard.ts

37 lines
1.0 KiB
TypeScript

import {
Injectable,
ExecutionContext,
ForbiddenException,
} from '@nestjs/common';
import { JWTGuard } from './jwt.guard';
import { MAIN_MENU } from '../constants';
@Injectable()
export class RolesGuard extends JWTGuard {
async canActivate(context: ExecutionContext): Promise<boolean> {
super.canActivate(context);
// jika endpoint tersebut bukan public, maka lakukan check lanjutan
if (!this.isPublic) {
// Check apakah endpoint ada decorator untuk exlude privilege (@ExcludePrivilege())
const excludePrivilege = this.reflector.getAllAndOverride<boolean>(
MAIN_MENU,
[context.getHandler(), context.getClass()],
);
if (excludePrivilege) return true;
// check apakah dapat akses module
const isNotAllow = await this.privilege.isNotAllowed();
if (isNotAllow) {
throw new ForbiddenException({
statusCode: 10003,
message: `Akses Terlarang, anda tidak punya akses ke module ini!`,
error: 'ACCESS_FORBIDDEN',
});
}
}
return true;
}
}