/** * 路由守卫模块 * 提供基于权限的路由拦截和未登录自动跳转登录页功能 */ /** * 路由守卫类 */ export class RouterGuard { /** * 构造函数 * @param auth 认证实例 */ constructor(auth) { this.auth = auth; } /** * 检查路由权限 * @param options 路由守卫选项 * @returns Promise 是否通过权限检查 */ 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 是否拥有权限 */ 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