Merge branch 'PingChuan' into shiy-login
# Conflicts: # app/config/api-config.ts fix: 1. 修复无法加载数据的问题:没有从入口页中进来会缺少数据。 2. 加强后端接口关于token的校验错误和权限校验错误的管理。 feat: 1. 对接后端的数据看板的接口。 2. 将系统设置单独抽出来作为管理员的固定一个入口。
This commit is contained in:
+25
-1
@@ -149,7 +149,14 @@ export async function loader({ request }: LoaderFunctionArgs) {
|
||||
// 🔒 RBAC 路由权限检查
|
||||
const { getUserRoutesByRole } = await import("~/api/auth/user-routes");
|
||||
// 权限校验需要包含隐藏路由,确保用户可以访问隐藏的功能页面
|
||||
// console.log("🔒 [Root Loader] 开始调用 getUserRoutesByRole...");
|
||||
const routesResult = await getUserRoutesByRole(userRole, frontendJWT, true);
|
||||
// console.log("🔒 [Root Loader] getUserRoutesByRole 返回结果:", {
|
||||
// success: routesResult.success,
|
||||
// hasData: !!routesResult.data,
|
||||
// error: routesResult.error,
|
||||
// shouldRedirectToHome: routesResult.shouldRedirectToHome
|
||||
// });
|
||||
|
||||
if (routesResult.success && routesResult.data) {
|
||||
// 从菜单数据中提取所有允许的路径
|
||||
@@ -165,7 +172,24 @@ export async function loader({ request }: LoaderFunctionArgs) {
|
||||
throw new Response("无权访问此页面", { status: 403 });
|
||||
}
|
||||
} else {
|
||||
// 获取路由权限失败,只记录警告,不阻止访问(避免影响正常使用)
|
||||
// 🔑 检查是否因为认证失败需要重定向到登录页
|
||||
if (routesResult.shouldRedirectToHome) {
|
||||
console.error("❌ [Root Loader] 获取用户路由权限失败,可能是令牌已过期,重定向到登录页");
|
||||
console.error("❌ [Root Loader] 错误详情:", routesResult.error);
|
||||
|
||||
// 清除会话并重定向到登录页
|
||||
const { sessionStorage } = await import("~/api/login/auth.server");
|
||||
const session = await sessionStorage.getSession(request.headers.get("Cookie"));
|
||||
const destroyedSession = await sessionStorage.destroySession(session);
|
||||
|
||||
return redirect("/login?expired=true", {
|
||||
headers: {
|
||||
"Set-Cookie": destroyedSession
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 其他错误,只记录警告,不阻止访问(避免影响正常使用)
|
||||
console.warn("⚠️ [Root Loader] 获取用户路由权限失败,跳过权限检查");
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user