-
Notifications
You must be signed in to change notification settings - Fork 0
/
casl.module.ts
35 lines (32 loc) · 910 Bytes
/
casl.module.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { PureAbility } from '@casl/ability';
import { DynamicModule, Module, Type } from '@nestjs/common';
import { CaslAbilityFactory } from './casl-ability.factory';
import { PoliciesGuard } from './policies.guard';
import { AnyAbilityLike } from './types';
export interface ICaslRootConfig<TAbility extends AnyAbilityLike = PureAbility<any, any>> {
abilityFactory: Type<CaslAbilityFactory<TAbility>>;
}
@Module( {
providers: [
PoliciesGuard,
],
} )
export class CaslModule {
/**
* Configure the CaslModule using the provided configuration.
*
* @param config - The module configuration to use.
* @returns the configured CaslModule
*/
public static withConfig( config: ICaslRootConfig<any> ): DynamicModule {
return {
module: CaslModule,
providers: [
{ provide: CaslAbilityFactory, useClass: config.abilityFactory },
],
exports: [
CaslAbilityFactory,
],
};
}
}