import { Permission } from "../../core";
import type { Context } from "hono";
import type { ServerEnv } from "../../modules/Controller";
import { Role } from "./Role";
export type GuardUserContext = {
    role?: string | null;
    [key: string]: any;
};
export type GuardConfig = {
    enabled?: boolean;
};
export type GuardContext = Context<ServerEnv> | GuardUserContext;
export declare class Guard {
    permissions: Permission[];
    roles?: Role[];
    config?: GuardConfig;
    constructor(permissions?: Permission[], roles?: Role[], config?: GuardConfig);
    static create(permissionNames: string[], roles?: Record<string, {
        permissions?: string[];
        is_default?: boolean;
        implicit_allow?: boolean;
    }>, config?: GuardConfig): Guard;
    getPermissionNames(): string[];
    getPermissions(): Permission[];
    permissionExists(permissionName: string): boolean;
    setRoles(roles: Role[]): this;
    getRoles(): Role[] | undefined;
    setConfig(config: Partial<GuardConfig>): this;
    registerPermission(permission: Permission): this;
    registerPermissions(permissions: Record<string, Permission>): any;
    registerPermissions(permissions: Permission[]): any;
    getUserRole(user?: GuardUserContext): Role | undefined;
    getDefaultRole(): Role | undefined;
    isEnabled(): boolean;
    hasPermission(permission: Permission, user?: GuardUserContext): boolean;
    hasPermission(name: string, user?: GuardUserContext): boolean;
    granted(permission: Permission | string, c?: GuardContext): boolean;
    throwUnlessGranted(permission: Permission | string, c: GuardContext): void;
}
