/**
 * 路由权限拦截中间件
 */ import { logger } from "../../../utils";
/**
 * 创建权限拦截中间件
 * 
 * @param config - 权限拦截中间件配置
 * @returns 路由中间件函数
 */ export function createAuthMiddleware(config) {
    const { checkAuth, checkLogin, checkRole, loginRedirect = '/login', forbiddenRedirect = '/403' } = config;
    return async (context)=>{
        const { to } = context;
        // 检查路由是否需要登录
        const needLogin = to.meta?.needLogin || to.meta?.handle?.needLogin;
        if (needLogin) {
            // 检查登录状态
            if (checkLogin) {
                const isLoggedIn = await checkLogin();
                if (!isLoggedIn) {
                    logger.debug(`路由权限拦截: 未登录，重定向到 ${loginRedirect}`);
                    return {
                        allow: false,
                        redirect: loginRedirect,
                        reason: '需要登录'
                    };
                }
            }
        }
        // 检查路由角色权限
        const roles = to.meta?.roles || to.meta?.handle?.roles;
        if (roles && Array.isArray(roles) && roles.length > 0) {
            if (checkRole) {
                const hasRole = await checkRole(roles);
                if (!hasRole) {
                    logger.debug(`路由权限拦截: 无权限，重定向到 ${forbiddenRedirect}`);
                    return {
                        allow: false,
                        redirect: forbiddenRedirect,
                        reason: '无权限访问'
                    };
                }
            }
        }
        // 执行自定义权限检查
        if (checkAuth) {
            const hasAuth = await checkAuth(context);
            if (!hasAuth) {
                logger.debug(`路由权限拦截: 权限检查失败，重定向到 ${forbiddenRedirect}`);
                return {
                    allow: false,
                    redirect: forbiddenRedirect,
                    reason: '权限检查失败'
                };
            }
        }
        // 权限检查通过
        return {
            allow: true
        };
    };
}

//# sourceMappingURL=auth.js.map