@gulibs/vgrove-client
Version:
Client-side utilities for React auto routes
75 lines • 2.93 kB
TypeScript
/**
* VGrove 标准化 Loader 工具
* 提供基于 React Router v6+ loader 模式的标准化认证和权限检查
* 替代原有的 RouteProtectionWrapper、RuntimeExecutor 等复杂系统
*/
import { type LoaderFunction } from 'react-router';
import type { BaseUser } from './types';
/**
* 认证检查函数类型
*/
export type AuthCheck<TUser extends BaseUser = BaseUser> = () => Promise<TUser | null> | TUser | null;
/**
* 角色检查函数类型
*/
export type RoleCheck<TUser extends BaseUser = BaseUser> = (user: TUser, requiredRoles: string[]) => boolean;
/**
* 权限检查函数类型
*/
export type PermissionCheck<TUser extends BaseUser = BaseUser> = (user: TUser, requiredPermissions: string[]) => boolean;
/**
* Loader 配置选项
*/
export interface LoaderOptions<TUser extends BaseUser = BaseUser> {
/** 认证检查函数 */
authCheck?: AuthCheck<TUser>;
/** 角色检查函数 */
roleCheck?: RoleCheck<TUser>;
/** 权限检查函数 */
permissionCheck?: PermissionCheck<TUser>;
/** 未认证时的重定向路径 */
loginPath?: string;
/** 权限不足时的重定向路径 */
forbiddenPath?: string;
/** 公共路径列表(无需认证) */
publicPaths?: string[];
}
/**
* 配置全局 loader 选项
*/
export declare function configureLoaders<TUser extends BaseUser = BaseUser>(options: LoaderOptions<TUser>): void;
/**
* 创建认证 loader
* 检查用户是否已认证,未认证则重定向到登录页
*/
export declare function createAuthLoader<TUser extends BaseUser = BaseUser>(options?: Partial<LoaderOptions<TUser>>): LoaderFunction;
/**
* 创建角色检查 loader
* 检查用户是否具有所需角色
*/
export declare function createRoleLoader<TUser extends BaseUser = BaseUser>(requiredRoles: string[], options?: Partial<LoaderOptions<TUser>>): LoaderFunction;
/**
* 创建权限检查 loader
* 检查用户是否具有所需权限
*/
export declare function createPermissionLoader<TUser extends BaseUser = BaseUser>(requiredPermissions: string[], options?: Partial<LoaderOptions<TUser>>): LoaderFunction;
/**
* 创建组合 loader
* 同时检查认证、角色和权限
*/
export declare function createCombinedLoader<TUser extends BaseUser = BaseUser>(config: {
roles?: string[];
permissions?: string[];
requireAll?: boolean;
}, options?: Partial<LoaderOptions<TUser>>): LoaderFunction;
/**
* 创建自定义 loader
* 允许用户定义自己的检查逻辑
*/
export declare function createCustomLoader<TUser extends BaseUser = BaseUser>(checkFunction: (user: TUser, request: Request) => Promise<boolean> | boolean, options?: Partial<LoaderOptions<TUser>>): LoaderFunction;
/**
* 组合多个 loader
* 按顺序执行多个 loader,任何一个失败都会中断
*/
export declare function combineLoaders(...loaders: LoaderFunction[]): LoaderFunction;
//# sourceMappingURL=loaders.d.ts.map