Skip to content

Instantly share code, notes, and snippets.

@minhntm
Created September 10, 2021 03:46
Show Gist options
  • Save minhntm/da957483a2874a05b026267371902f0a to your computer and use it in GitHub Desktop.
Save minhntm/da957483a2874a05b026267371902f0a to your computer and use it in GitHub Desktop.
import { CanActivate, ExecutionContext, Injectable } from "@nestjs/common";
import { Reflector } from "@nestjs/core";
@Injectable()
export class PermissionsGuard implements CanActivate {
constructor(private reflector: Reflector, private abilityFactory: CaslAbilityFactory) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
const requiredPermissions =
this.reflector.get<RequiredPermission[]>(PERMISSION_CHECKER_KEY, context.getHandler()) || [];
const req = context.switchToHttp().getRequest();
const user = req.user;
const ability = await this.abilityFactory.createForUser(user);
return requiredPermissions.every(permission => this.isAllowed(ability, permission));
}
private isAllowed(ability: AppAbility, permission: RequiredPermission): boolean {
return ability.can(...permission);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment