import { AnyClass, Subject } from '@casl/ability/dist/types/types'; import { DefaultActions } from '../actions.enum'; import { FactoryProvider, ModuleMetadata } from '@nestjs/common'; import { UserBeforeFilterHook, UserBeforeFilterTuple } from './hooks.interface'; import { AnyPermissions } from './permissions.interface'; import { AuthorizableUser } from './authorizable-user.interface'; import { AuthorizableRequest } from './request.interface'; export interface OptionsForRoot = AuthorizableUser, Request = AuthorizableRequest> { superuserRole?: Roles; getUserFromRequest?: (request: Request) => User | undefined; getUserHook?: AnyClass> | UserBeforeFilterTuple; } export interface OptionsForFeature = AuthorizableUser> { permissions: AnyPermissions; } export interface OptionsForRootAsync = AuthorizableUser, Request = AuthorizableRequest> extends Pick { useFactory: FactoryProvider> | OptionsForRoot>['useFactory']; inject?: FactoryProvider['inject']; }