From d2346aad705f5f362267559d34509a95fcc4d41e Mon Sep 17 00:00:00 2001 From: yorn <1057707203@qq.com> Date: Mon, 15 Dec 2025 22:25:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:1.=20=E4=BC=98=E5=8C=96=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86=E7=9A=84=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E4=B8=AD=E6=A0=B7=E5=BC=8F=E3=80=82=202.=20root=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=99=90=E5=88=B651707=E7=AB=AF=E5=8F=A3=E7=9A=84?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E8=AE=BF=E9=97=AE=EF=BC=8C=E5=8F=AA=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E8=AE=BF=E9=97=AE=E4=BA=A4=E5=8F=89=E8=AF=84=E6=9F=A5?= =?UTF-8?q?=E3=80=82=203.=20=E5=BC=80=E5=90=AF=E7=9C=81=E5=B1=80=E7=AB=AF?= =?UTF-8?q?=E5=8F=A3=E9=99=90=E5=88=B6=E7=9A=84=E9=85=8D=E7=BD=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 +- app/root.tsx | 37 +++++---- app/routes/role-permissions._index.tsx | 109 ++++++++++++++----------- 3 files changed, 84 insertions(+), 64 deletions(-) diff --git a/.env b/.env index f7f373b..6df2eee 100644 --- a/.env +++ b/.env @@ -5,4 +5,4 @@ JWT_SECRET=gdyc-super-secrets-jjwtt-key-change-this-in-production-20250721-from- # 交叉评查专属模式 # 设置为 true 时,端口51707只显示交叉评查入口,隐藏其他模块 # 设置为 false 时,保持正常模式显示所有模块 -CROSS_CHECKING_ONLY_MODE=false \ No newline at end of file +CROSS_CHECKING_ONLY_MODE=true \ No newline at end of file diff --git a/app/root.tsx b/app/root.tsx index a686caf..0bce61d 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -34,12 +34,19 @@ import RouteChangeLoader from "~/components/ui/RouteChangeLoader"; // 导入认证相关的服务器端功能(仅在服务器端使用) -import { - // getUserSession, +import { + // getUserSession, logout, - type UserRole + type UserRole } from "~/api/login/auth.server"; +// 导入交叉评查专属模式配置 +import { + CROSS_CHECKING_ONLY_MODE, + CROSS_CHECKING_ONLY_PORT, + getCurrentPort +} from "~/config/api-config"; + // 定义需要高级权限的路径 // export const developerOnlyPaths = [ // '/settings', @@ -289,20 +296,20 @@ export async function loader({ request }: LoaderFunctionArgs) { // 如果执行到这里,说明已通过认证或是公共路径 } - // 检查51707端口访问控制 - const currentPort = process.env.PORT || process.env.API_PORT_CONFIG; - const runtimePort = url.port || currentPort; - const isPort51707 = currentPort === '51707' || runtimePort === '51707'; + // 检查交叉评查专属模式访问控制 + // 当 CROSS_CHECKING_ONLY_MODE=true 且端口为指定端口时,只允许访问 /cross-checking 相关路由 + const currentPort = getCurrentPort(); + const isCrossCheckingOnlyMode = CROSS_CHECKING_ONLY_MODE && currentPort === CROSS_CHECKING_ONLY_PORT; - if (isPort51707 && !isPublicPath) { - // 51707端口(省局)只允许访问交叉评查相关路径和首页 - const allowedPaths = ['/', '/cross-checking','/chat-with-llm']; - const isAllowedPath = allowedPaths.some(path => pathname === path) || - pathname.startsWith('/cross-checking/') || - pathname.startsWith('/chat-with-llm/'); + if (isCrossCheckingOnlyMode && !isPublicPath) { + // 交叉评查专属模式:只允许访问首页和交叉评查相关路径 + const crossCheckingAllowedPaths = ['/', '/cross-checking']; + const isCrossCheckingAllowedPath = crossCheckingAllowedPaths.some(path => pathname === path) || + pathname.startsWith('/cross-checking/'); - if (!isAllowedPath) { - return redirect("/cross-checking"); + if (!isCrossCheckingAllowedPath) { + console.warn(`⚠️ [Root Loader] 交叉评查专属模式:拒绝访问 ${pathname}`); + throw new Response("交叉评查专属模式下无权访问此页面", { status: 403 }); } } diff --git a/app/routes/role-permissions._index.tsx b/app/routes/role-permissions._index.tsx index c988d52..913fb8d 100644 --- a/app/routes/role-permissions._index.tsx +++ b/app/routes/role-permissions._index.tsx @@ -868,6 +868,9 @@ export default function RolePermissions() { // v3.8: 加载角色权限的 loading 状态 const [loadingPermissions, setLoadingPermissions] = useState(false); + // 加载用户列表的 loading 状态 + const [loadingUsers, setLoadingUsers] = useState(false); + // v3.8: 路由ID到路由信息的映射(用于显示通用权限关联的路由名称) const [routeIdToInfoMap, setRouteIdToInfoMap] = useState>(new Map()); @@ -981,6 +984,7 @@ export default function RolePermissions() { const handleSelectRole = async (role: RoleInfo) => { setSelectedRole(role); setLoadingPermissions(true); // v3.8: 开始加载权限 + setLoadingUsers(true); // 开始加载用户列表 try { // 动态导入权限映射工具 @@ -1069,6 +1073,7 @@ export default function RolePermissions() { toastService.error('加载角色权限失败'); } finally { setLoadingPermissions(false); // v3.8: 结束加载权限 + setLoadingUsers(false); // 结束加载用户列表 } }; @@ -1933,59 +1938,67 @@ export default function RolePermissions() { -
- {roleUsers.length > 0 ? ( - roleUsers.map(user => ( -
-
- -
-
-
- {user.nick_name} - {user.is_leader && ( - 负责人 - )} + {/* 加载状态显示 */} + {loadingUsers ? ( +
+ + 正在加载用户列表... +
+ ) : ( +
+ {roleUsers.length > 0 ? ( + roleUsers.map(user => ( +
+
+
-
@{user.username}
-
- {/* {JSON.stringify(user)} */} - {user.ou_name} - {user.area && • {user.area}} +
+
+ {user.nick_name} + {user.is_leader && ( + 负责人 + )} +
+
@{user.username}
+
+ {/* {JSON.stringify(user)} */} + {user.ou_name} + {user.area && • {user.area}} +
+
+ {user.phone_number && ( + + + {user.phone_number} + + )} + {user.email && ( + + + {user.email} + + )} +
-
- {user.phone_number && ( - - - {user.phone_number} - - )} - {user.email && ( - - - {user.email} - - )} +
+
-
- -
+ )) + ) : ( +
+ +

暂无用户拥有此角色

- )) - ) : ( -
- -

暂无用户拥有此角色

-
- )} -
+ )} +
+ )}
)}