import { SessionUser } from "../../auth/SessionUser"; import { DataverseDto } from "./DataverseRepository"; /** * Generic User type with roles */ export interface SecuredUser extends DataverseDto { roles?: SecuredUserRole[]; } /** * Role Type enum constraint */ export type RoleTypeEnum = string | number; /** * Generic Role type */ export interface SecuredUserRole { type: T; } /** * Security Policy type */ export type SecurityPolicy, R extends RoleTypeEnum> = { [K in R | "default"]?: (data: D, user: U, session?: SessionUser) => Promise; }; /** * Security Policy interface */ export interface SecurityPolicySet, R extends RoleTypeEnum> { create?: SecurityPolicy; read: SecurityPolicy; update: SecurityPolicy; delete?: SecurityPolicy; fetchAuthenticatedUser: (session: SessionUser) => Promise; } export interface SecurityPolicies, R extends RoleTypeEnum> { [key: string]: SecurityPolicySet; } /** * We allow write access for applicants or representatives * @param lodgment * @param session * @returns */ export declare function hasAccessByPolicy, R extends RoleTypeEnum>(policy: SecurityPolicy, data: any, fetchAuthenticatedUser: (session: SessionUser) => Promise, session?: SessionUser): Promise;