/** * AccessControlService * * This service provides access control functionality including: * - 5-phase bulk access check with BFS inheritance graph traversal * - Assign and revoke access permissions * - Bulk operations for access management * - Super admin checks * - Access inheritance management (including parent access inheritance) * * This is the TypeScript equivalent of the C# AccessControlService class (v3.4.0). */ import { AccessResult, BulkConceptAccessRequest, BulkParentAccessInheritanceResult } from '../../DataStructures/AccessControl/AccessControlModels'; import { IAPIClientService } from './APIClientService'; /** * Interface for the Access Control Service */ export interface IAccessControlService { checkAccess(conceptId: number, permission: string, entityId?: number | null): Promise; checkAccessBulk(conceptIds: number[], permission: string, entityId?: number | null): Promise>; getConceptIdsWithPermission(permission: string, conceptIdsFilter: number[], entityId?: number | null): Promise; assignAccess(request: BulkConceptAccessRequest): Promise; revokeAccess(conceptId: number, permission: string, entityId?: number | null): Promise; revokeAccessBulk(request: BulkConceptAccessRequest): Promise; setAccessInheritance(conceptId: number): Promise; getAccessInheritanceStatus(conceptId: number, connectionTypeId?: number): Promise; setAccessInheritanceStatus(conceptId: number, isEnabled: boolean, connectionTypeId?: number): Promise; setParentAccessInheritance(conceptId: number, parentConceptId: number): Promise; setParentAccessInheritanceBulk(childConceptIds: number[], parentConceptId: number): Promise; removeParentAccessInheritance(conceptId: number, parentConceptId?: number): Promise; removeParentAccessInheritanceBulk(childConceptIds: number[], parentConceptId?: number): Promise; hasParentAccessInheritance(conceptId: number, parentConceptId?: number): Promise; getParentAccessId(conceptId: number): Promise; isSuperAdmin(entityId: number): Promise; assignSuperAdmin(entityId: number): Promise; revokeSuperAdmin(entityId: number): Promise; } export declare class AccessControlService implements IAccessControlService { private readonly apiClient; constructor(apiClient?: IAPIClientService); /** * Check whether a user/entity has the specified permission on a single concept. * Delegates to checkAccessBulk for full inheritance + group resolution. */ checkAccess(conceptId: number, permission: string, entityId?: number | null): Promise; /** * 5-phase bulk access check algorithm. * Matches the C# AccessControlService.CheckAccessBulk implementation. * * Phase 1: Super-admin short-circuit * Phase 2: Fast-path classification (owner, public, type concepts) * Phase 3: BFS inheritance graph resolution (3 sources) * Phase 4: Bulk access decision resolution (API) * Phase 5: Grant-only merge per concept */ checkAccessBulk(conceptIds: number[], permission: string, entityId?: number | null): Promise>; /** * Get all conceptIds which have a certain permission for an entity. * Delegates to checkAccessBulk for full inheritance support. */ getConceptIdsWithPermission(permission: string, conceptIdsFilter: number[], entityId?: number | null): Promise; /** * Resolve inheritance graph via 3-source BFS, depth-limited to MAX_BFS_DEPTH. * * Source 1: FreeSchema internal connections ("the_parent_access_inheritance") * Source 2: Explicit parent access links (via Access API) * Source 3: Concept-connection access inheritance */ private resolveBulkInheritanceGraph; private resolveBulkDecisions; private resolveSubjects; private hasAnyGrant; assignAccess(request: BulkConceptAccessRequest): Promise; revokeAccess(conceptId: number, permission: string, entityId?: number | null): Promise; revokeAccessBulk(request: BulkConceptAccessRequest): Promise; setAccessInheritance(conceptId: number): Promise; getAccessInheritanceStatus(conceptId: number, connectionTypeId?: number): Promise; setAccessInheritanceStatus(conceptId: number, isEnabled: boolean, connectionTypeId?: number): Promise; setParentAccessInheritance(conceptId: number, parentConceptId: number): Promise; setParentAccessInheritanceBulk(childConceptIds: number[], parentConceptId: number): Promise; removeParentAccessInheritance(conceptId: number, parentConceptId?: number): Promise; removeParentAccessInheritanceBulk(childConceptIds: number[], parentConceptId?: number): Promise; hasParentAccessInheritance(conceptId: number, parentConceptId?: number): Promise; getParentAccessId(conceptId: number): Promise; isSuperAdmin(entityId: number): Promise; assignSuperAdmin(entityId: number): Promise; revokeSuperAdmin(entityId: number): Promise; makeConceptPrivate(conceptId: number): Promise; private static parseBoolData; private static parseIntData; static isSuperAdmin(entityId: number): Promise; static assignSuperAdmin(entityId: number): Promise; static revokeSuperAdmin(entityId: number): Promise; static checkAccess(conceptId: number, permission: string, entityId?: number | null): Promise; static checkAccessBulk(conceptIds: number[], permission: string, entityId?: number | null): Promise>; static assignAccess(request: BulkConceptAccessRequest): Promise; static revokeAccess(conceptId: number, permission: string, entityId?: number | null): Promise; static revokeAccessBulk(request: BulkConceptAccessRequest): Promise; static setParentAccessInheritance(conceptId: number, parentConceptId: number): Promise; static setParentAccessInheritanceBulk(childConceptIds: number[], parentConceptId: number): Promise; static removeParentAccessInheritance(conceptId: number, parentConceptId?: number): Promise; static removeParentAccessInheritanceBulk(childConceptIds: number[], parentConceptId?: number): Promise; static hasParentAccessInheritance(conceptId: number, parentConceptId?: number): Promise; static getParentAccessId(conceptId: number): Promise; } /** * Get the default singleton instance of AccessControlService */ export declare function getAccessControlService(): AccessControlService; /** * Initialize the default singleton instance with custom configuration */ export declare function initializeAccessControlService(apiClient?: IAPIClientService): AccessControlService; export default AccessControlService;