import { default as React, ReactNode } from 'react'; import { ArchbaseSecurityManager, RegisterActionOptions } from './ArchbaseSecurityManager'; import { UserDto } from './SecurityDomain'; /** * Componente de loading padrão para o carregamento de permissões. * Exibe um skeleton animado enquanto as permissões são carregadas. */ export declare const DefaultSecurityLoading: React.FC; export interface ArchbaseSecurityContextType { user: UserDto | null; /** Verdadeiro enquanto as permissões do usuário ainda não chegaram. */ isLoading: boolean; /** * Se o usuário alcança uma capacidade. * * Aceita as duas formas: `"tms.ordemservico:aprovar_custo"` pergunta pela capacidade exata; * `"aprovar_custo"` pergunta se ele tem essa ação em algum recurso — a forma antiga, mantida * por compatibilidade e imprecisa por natureza, já que o mesmo verbo existe em vários recursos. */ hasGlobalPermission: (actionName: string) => boolean; hasAnyGlobalPermission: (actions: string[]) => boolean; hasAllGlobalPermissions: (actions: string[]) => boolean; /** A capacidade exata, sem a ambiguidade do nome solto. Prefira esta. */ hasResourcePermission: (resourceName: string, actionName: string) => boolean; /** Se o usuário tem QUALQUER ação concedida no recurso — a pergunta que um menu faz. */ canAccessResource: (resourceName: string) => boolean; /** Nome do recurso para as ações concedidas nele. Vazio enquanto carrega ou se não deu para saber. */ permissionsByResource: Record; /** * As permissões não puderam ser carregadas — backend anterior ao archbase-security 3.2.3, ou * falha de rede. * *

Existe para que "não pode nada" e "não deu para saber" não se confundam. Enquanto for * verdadeiro, os `has*` respondem `false`, e é o consumidor quem decide o que fazer com isso: * esconder o controle ou liberá-lo. Sem este campo, a decisão seria tomada em silêncio — que é * exatamente como este provider passou a versão inteira respondendo `false` para todo mundo. */ permissionsUnavailable: boolean; isAdmin: boolean; error: string | null; setError: (error: string | null) => void; } declare const ArchbaseSecurityContext: React.Context; export interface ArchbaseSecurityProviderProps { children: ReactNode; user: UserDto | null; onError?: (error: string) => void; } export declare const ArchbaseSecurityProvider: React.FC; export interface ArchbaseViewSecurityContextType { securityManager: ArchbaseSecurityManager | null; hasPermission: (actionName: string) => boolean; hasAnyPermission: (actions: string[]) => boolean; hasAllPermissions: (actions: string[]) => boolean; registerAction: (actionName: string, actionDescription: string, opcoes?: RegisterActionOptions) => void; isLoading: boolean; error: string | null; } declare const ArchbaseViewSecurityContext: React.Context; export interface ArchbaseViewSecurityProviderProps { children: ReactNode; resourceName: string; resourceDescription: string; requiredPermissions?: string[]; fallbackComponent?: ReactNode; /** Componente customizado para exibir durante o carregamento de permissões */ loadingComponent?: ReactNode; onSecurityReady?: (manager: ArchbaseSecurityManager) => void; onError?: (error: string) => void; } export declare const ArchbaseViewSecurityProvider: React.FC; export { ArchbaseSecurityContext, ArchbaseViewSecurityContext };