/**
 * 路由守卫模块
 * 提供基于权限的路由拦截和未登录自动跳转登录页功能
 */
/**
 * 路由守卫类
 */
export class RouterGuard {
    /**
     * 构造函数
     * @param auth 认证实例
     */
    constructor(auth) {
        this.auth = auth;
    }
    /**
     * 检查路由权限
     * @param options 路由守卫选项
     * @returns Promise<boolean> 是否通过权限检查
     */
    async check(options) {
        const { requiresAuth = true, requiredPermissions = [] } = options;
        // 检查是否需要登录
        if (requiresAuth) {
            // 检查是否已认证
            if (!this.auth.isAuthenticated()) {
                // 未认证，跳转到登录页
                this.auth.login(options.redirectUri);
                return false;
            }
            // 检查是否需要权限
            if (requiredPermissions.length > 0) {
                // 获取用户权限
                const userPermissions = [''];
                // 检查是否拥有所有需要的权限
                const hasPermission = requiredPermissions.every(permission => userPermissions.includes(permission));
                if (!hasPermission) {
                    // 权限不足，跳转到权限不足页
                    if (options.unauthorizedRedirectUri) {
                        window.location.href = options.unauthorizedRedirectUri;
                    }
                    return false;
                }
            }
        }
        return true;
    }
    /**
     * 创建Vue路由守卫
     * @returns 路由守卫函数
     */
    createVueGuard() {
        return async (to, from, next) => {
            var _a;
            // 从路由元信息中获取守卫选项
            const options = ((_a = to.meta) === null || _a === void 0 ? void 0 : _a.auth) || {};
            try {
                const allowed = await this.check(options);
                if (allowed) {
                    next();
                }
            }
            catch (error) {
                console.error('Route guard error:', error);
                next(false);
            }
        };
    }
    /**
     * 检查当前用户是否有权限访问资源
     * @param permissions 需要的权限列表
     * @returns Promise<boolean> 是否拥有权限
     */
    async hasPermission(permissions) {
        if (!permissions) {
            return true;
        }
        const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions];
        // 检查是否已认证
        if (!this.auth.isAuthenticated()) {
            return false;
        }
        // 获取用户权限
        const userPermissions = [''];
        // 检查是否拥有所有需要的权限
        return requiredPermissions.every(permission => userPermissions.includes(permission));
    }
}
//# sourceMappingURL=router.js.map