import { CanActivate, ExecutionContext } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { PermissionDefinitionDefaults, Permissions, Tid } from '@superawesome/permissions';
import { TExtractUserFromRequest, IPermissionDefinitionStringOwnHooks, TProjectTo } from './types';
/**
 * Acts only as an interface
 * @internal
 */
export declare abstract class AbstractPermissionsGuard implements CanActivate {
    protected readonly permissions: Permissions<Tid, Tid>;
    protected readonly permissionsOwnershipService: any;
    protected reflector: Reflector;
    protected readonly extractUserFromRequest: TExtractUserFromRequest<Tid>;
    constructor(permissions: Permissions<Tid, Tid>, permissionsOwnershipService: any, reflector: Reflector, extractUserFromRequest: TExtractUserFromRequest<Tid>);
    abstract canActivate(context: ExecutionContext): any;
}
export interface IGuardOptions<TResourceId extends Tid = number> {
    resource?: string;
    projectResourceId?: TProjectTo<TResourceId>;
}
/**
 * The factory function that creates the customised Guard for a Controller.
 *
 * @param guardOptions see IGuardOptions
 * @param permissionDefinitionStringOwnHooks
 * @param pdDefaults
 */
export declare const createPermissionsGuard: (guardOptions?: IGuardOptions, permissionDefinitionStringOwnHooks?: IPermissionDefinitionStringOwnHooks | IPermissionDefinitionStringOwnHooks[], pdDefaults?: PermissionDefinitionDefaults) => typeof AbstractPermissionsGuard;
