import { ResourcePermission, ResourceACL, PermissionAction } from './types'; /** * Permission levels from least to most permissive. */ export declare const PERMISSION_LEVELS: { readonly none: 0; readonly view: 1; readonly edit: 2; readonly manage: 3; readonly owner: 4; }; /** * Actions allowed at each permission level. */ export declare const LEVEL_ACTIONS: Record; /** * Resource Permission Manager for managing resource-level access control. * * Provides functionality for managing individual resource permissions, * including ACL management, permission inheritance, and access checking. * * @example * ```typescript * const manager = new ResourcePermissionManager(); * * // Create an ACL for a document * manager.createACL('documents', 'doc-123', 'user-456'); * * // Grant permission to another user * manager.grantPermission('documents', 'doc-123', { * granteeType: 'user', * granteeId: 'user-789', * permissionLevel: 'edit', * }); * * // Check permission * manager.checkAccess('documents', 'doc-123', 'user-789', 'update'); // true * ``` */ export declare class ResourcePermissionManager { private acls; private permissionsByGrantee; constructor(); /** * Create a new ACL for a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID * @param owner - Owner user ID * @param options - Additional options * @returns Created ACL */ createACL(resourceType: string, resourceId: string, owner: string, options?: { inheritParent?: boolean; parentResource?: { type: string; id: string; }; }): ResourceACL; /** * Get ACL for a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID * @returns ACL or undefined */ getACL(resourceType: string, resourceId: string): ResourceACL | undefined; /** * Delete ACL for a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID */ deleteACL(resourceType: string, resourceId: string): void; /** * Transfer ownership of a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID * @param newOwner - New owner user ID * @param grantor - User performing the transfer */ transferOwnership(resourceType: string, resourceId: string, newOwner: string, grantor: string): void; /** * Grant permission on a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID * @param grant - Permission grant details * @param grantor - User granting the permission */ grantPermission(resourceType: string, resourceId: string, grant: { granteeType: ResourcePermission['granteeType']; granteeId?: string; permissionLevel: ResourcePermission['permissionLevel']; actions?: PermissionAction[]; expiresAt?: string; }, grantor?: string): void; /** * Revoke permission on a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID * @param granteeType - Grantee type * @param granteeId - Grantee ID (optional for 'everyone') */ revokePermission(resourceType: string, resourceId: string, granteeType: ResourcePermission['granteeType'], granteeId?: string): void; /** * Grant permission to everyone. * * @param resourceType - Resource type * @param resourceId - Resource ID * @param permissionLevel - Permission level * @param grantor - User granting */ grantPublicAccess(resourceType: string, resourceId: string, permissionLevel?: 'view' | 'edit', grantor?: string): void; /** * Revoke public access. * * @param resourceType - Resource type * @param resourceId - Resource ID */ revokePublicAccess(resourceType: string, resourceId: string): void; /** * Check if a user has access to perform an action on a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID * @param userId - User ID * @param action - Action to check * @param context - Additional context * @returns Whether access is allowed */ checkAccess(resourceType: string, resourceId: string, userId: string, action: PermissionAction, context?: { userRoles?: string[]; userGroups?: string[]; }): boolean; /** * Get the effective permission level for a user on a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID * @param userId - User ID * @param context - Additional context * @returns Effective permission level */ getEffectivePermissionLevel(resourceType: string, resourceId: string, userId: string, context?: { userRoles?: string[]; userGroups?: string[]; }): ResourcePermission['permissionLevel']; /** * Get all resources a user has access to. * * @param userId - User ID * @param resourceType - Optional resource type filter * @returns Array of accessible resource IDs */ getAccessibleResources(userId: string, resourceType?: string): string[]; /** * Get all users with access to a resource. * * @param resourceType - Resource type * @param resourceId - Resource ID * @returns Array of user permissions */ getResourcePermissions(resourceType: string, resourceId: string): ResourcePermission[]; /** * Get ACL key from resource type and ID. */ private getACLKey; /** * Get grantee key for indexing. */ private getGranteeKey; /** * Get or create ACL for a resource. */ private getOrCreateACL; /** * Find permission in ACL entries. */ private findPermission; /** * Check if an action is allowed by a permission. */ private actionAllowed; /** * Get the higher of two permission levels. */ private getHigherLevel; /** * Check if a permission has expired. */ private isExpired; /** * Index a permission for quick lookup by grantee. */ private indexPermission; /** * Remove a permission from the index. */ private removePermissionIndex; } /** * Create a new resource permission manager. * * @returns ResourcePermissionManager instance */ export declare function createResourcePermissionManager(): ResourcePermissionManager; /** * Check if a permission level grants a specific action. * * @param level - Permission level * @param action - Action to check * @returns Whether action is granted */ export declare function levelGrantsAction(level: keyof typeof PERMISSION_LEVELS, action: PermissionAction): boolean; /** * Get the minimum permission level required for an action. * * @param action - Action to check * @returns Minimum required level */ export declare function getMinimumLevelForAction(action: PermissionAction): keyof typeof PERMISSION_LEVELS; /** * Compare two permission levels. * * @param a - First level * @param b - Second level * @returns Positive if a > b, negative if a < b, 0 if equal */ export declare function comparePermissionLevels(a: keyof typeof PERMISSION_LEVELS, b: keyof typeof PERMISSION_LEVELS): number;