Skip to content

Instantly share code, notes, and snippets.

@minhntm
Created September 10, 2021 03:53
Show Gist options
  • Save minhntm/4710ebc03dca874240ad9e5b01a9bac7 to your computer and use it in GitHub Desktop.
Save minhntm/4710ebc03dca874240ad9e5b01a9bac7 to your computer and use it in GitHub Desktop.
interface CaslPermission {
action: PermissionAction;
subject: string;
condition?: PermissionCondition;
}
@Injectable()
export class CaslAbilityFactory {
constructor(private authoService: AuthzService) {}
async createForUser(user: User): Promise<AppAbility> {
const dbPermissions: Permission[] = await this.authoService.findAllPermissionsOfUser(user);
const caslPermissions: CaslPermission[] = dbPermissions.map(p => ({
action: p.action,
subject: p.permissionObject.name,
conditions: Permission.parseCondition(p.condition, user),
}));
return new Ability<[PermissionAction, PermissionObjectType]>(caslPermissions);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment