jdk 17
This commit is contained in:
89
sdk/frontend/oauth2-login-sdk/dist/guards/router.js
vendored
Normal file
89
sdk/frontend/oauth2-login-sdk/dist/guards/router.js
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
/**
|
||||
* 路由守卫模块
|
||||
* 提供基于权限的路由拦截和未登录自动跳转登录页功能
|
||||
*/
|
||||
/**
|
||||
* 路由守卫类
|
||||
*/
|
||||
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
|
||||
Reference in New Issue
Block a user