import type { ExecutionContext } from '@nestjs/common'; import type { PermissionsProvider } from '@oidc-adapters/core'; export type PermissionBasedAccessControlServiceOptions = PermissionBasedAccessControlServiceOptionsContext | PermissionBasedAccessControlServiceOptionsUser; export interface PermissionBasedAccessControlServiceOptionsCommon { providerType: 'user' | 'context'; provider: UserPermissionsProviderFactory | ContextPermissionsProviderFactory; } export interface PermissionBasedAccessControlServiceOptionsContext extends PermissionBasedAccessControlServiceOptionsCommon { providerType: 'context'; provider: ContextPermissionsProviderFactory; } export interface PermissionBasedAccessControlServiceOptionsUser extends PermissionBasedAccessControlServiceOptionsCommon { providerType: 'user'; provider: UserPermissionsProviderFactory; } export type ContextPermissionsProviderFactory = (context: ExecutionContext) => PermissionsProvider; export type UserPermissionsProviderFactory = (user: Express.User) => PermissionsProvider; export declare const PERMISSION_BASED_ACCESS_CONTROL_SERVICE_OPTIONS: unique symbol; export interface PermissionScopesSpec { resource?: string; scopes: string | string[]; } export type PermissionsSpec = string | PermissionScopesSpec | (string | PermissionScopesSpec)[]; export declare class PermissionBasedAccessControlService { private options; constructor(options: PermissionBasedAccessControlServiceOptions); getPermissionsProvider(context: ExecutionContext): PermissionsProvider | undefined; hasAllPermissions(context: ExecutionContext, permissions: PermissionsSpec): Promise; hasOnePermission(context: ExecutionContext, permissions: PermissionsSpec): Promise; }