bknd
Version:
Lightweight Firebase/Supabase alternative built to run anywhere — incl. Next.js, React Router, Astro, Cloudflare, Bun, Node, AWS Lambda & more.
40 lines (39 loc) • 1.62 kB
TypeScript
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;
}