import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core'; import { TenantPermissionEffect } from '../types/index.js'; /** * Constructor options for {@link TenantPermissionOverride}. */ export interface TenantPermissionOverrideOptions extends SmrtObjectOptions { tenantId?: string; permissionId?: string; effect?: TenantPermissionEffect; } /** * TenantPermissionOverride allows setting explicit permission values at the tenant level. * * This is used in hierarchical tenant structures to control permission inheritance. * Each override specifies whether a permission is: * - INHERIT: Use the parent tenant's value (default behavior) * - GRANT: Explicitly grant at this tenant level * - DENY: Explicitly deny at this tenant level (blocks inheritance) * * ## Resolution Order * * When resolving effective tenant permissions: * 1. Walk down the tenant hierarchy from root to target, accumulating permissions * 2. Apply each tenant's overrides (DENY blocks, GRANT adds) * 3. INHERIT means "use whatever the parent resolved to" * * @example * ```typescript * // Explicitly grant a permission at this tenant level * const override = await tenantPermissionOverrides.create({ * tenantId: tenant.id, * permissionId: specialPermission.id, * effect: TenantPermissionEffect.GRANT * }); * * // Block a permission from being inherited (even if parent grants it) * const block = await tenantPermissionOverrides.create({ * tenantId: tenant.id, * permissionId: dangerousPermission.id, * effect: TenantPermissionEffect.DENY * }); * * // Explicitly inherit (same as not having an override, but documents intent) * const inherit = await tenantPermissionOverrides.create({ * tenantId: tenant.id, * permissionId: standardPermission.id, * effect: TenantPermissionEffect.INHERIT * }); * ``` */ export declare class TenantPermissionOverride extends SmrtObject { /** * Foreign key to Tenant */ tenantId?: string; /** * Foreign key to Permission */ permissionId?: string; /** * Effect of the override: inherit, grant, or deny */ effect: TenantPermissionEffect; constructor(options?: TenantPermissionOverrideOptions); /** * Check if this override inherits from parent */ isInherit(): boolean; /** * Check if this override grants the permission */ isGrant(): boolean; /** * Check if this override denies the permission */ isDeny(): boolean; /** * Check if this override has an explicit effect (not inherit) */ hasExplicitEffect(): boolean; } //# sourceMappingURL=TenantPermissionOverride.d.ts.map