diff --git a/app/api/auth/user-routes.ts b/app/api/auth/user-routes.ts index 5d0324e..065c00d 100644 --- a/app/api/auth/user-routes.ts +++ b/app/api/auth/user-routes.ts @@ -598,16 +598,16 @@ function buildMenuTreeFromRoutes(routes: RouteInfo[]): MenuItem[] { /** * 根据用户角色映射到权限系统的角色标识 - * @param userRole 前端用户角色 ('common' | 'developer') + * @param userRole 前端用户角色 ('common' | 'admin' | 'deptLeader' | 'groupLeader') * @returns 数据库中的角色标识 */ export function mapUserRoleToRoleKey(userRole: string): string { const roleMapping: Record = { 'common': 'common', - 'developer': 'admin', + 'admin': 'admin', 'deptLeader': 'deptLeader', 'groupLeader': 'groupLeader' }; - return roleMapping[userRole] || 'common'; + return roleMapping[userRole]; } \ No newline at end of file diff --git a/app/api/axios-client.ts b/app/api/axios-client.ts index 19f6074..bf8de24 100644 --- a/app/api/axios-client.ts +++ b/app/api/axios-client.ts @@ -200,7 +200,7 @@ export async function apiRequest( return getMockResponse(endpoint); } - console.log('api-base-url-----------',API_BASE_URL) + // console.log('api-base-url-----------',API_BASE_URL) try { // 构建 URL diff --git a/app/api/login/auth.server.ts b/app/api/login/auth.server.ts index 67823e4..6ba7a6f 100644 --- a/app/api/login/auth.server.ts +++ b/app/api/login/auth.server.ts @@ -30,7 +30,7 @@ import { OAUTH_CONFIG, API_BASE_URL } from "~/config/api-config"; * @property {'common'} common - 普通用户,有基本的系统访问权限 * @property {'developer'} developer - 开发者/管理员,有完整的系统管理权限 */ -export type UserRole = 'common' | 'developer'; +export type UserRole = 'common' | 'admin' | 'deptLeader' | 'groupLeader'; /** * 用户信息接口,对应 sso_users 表结构 @@ -187,7 +187,7 @@ function createUserInfoWithJWT(userInfo: UserInfo, savedUserData: SsoUser, userR export async function getUserSession(request: Request) { const session = await getSession(request); const isAuthenticated = session.get("isAuthenticated") === true; - const userRole = session.get("userRole") || 'common' as UserRole; + const userRole = session.get("userRole") as UserRole; let accessToken = session.get("accessToken"); const refreshToken = session.get("refreshToken"); let tokenIssuedAt = session.get("tokenIssuedAt"); @@ -736,8 +736,6 @@ export async function simpleRootLogin( }); } - - // 调用登录接口 const loginResponse = await fetch(`${API_BASE_URL}/password_login`, { method: 'POST', @@ -755,40 +753,48 @@ export async function simpleRootLogin( if (loginResult.code === 0 && loginResult.data) { // 登录成功,构建用户信息 const userData = loginResult.data; - const userRole = 'common' as UserRole; // 默认角色 + console.log('管理员登录userData', userData); + const userRole = userData.role; // 默认角色 - // 构建用户信息对象 - const userInfo = { + // 生成模拟的OAuth token信息 + const mockTokenExpiresIn = 7200; // 2小时 + const mockAccessToken = `mock_access_token_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; + const mockRefreshToken = `mock_refresh_token_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; + + // 生成前端JWT + const jwtUserInfo: UserInfoForJWT = { sub: userData.sub, - user_id: userData.sub, // 使用sub作为user_id + user_id: userData.user_id, username: userData.username, nick_name: userData.nick_name, - phone_number: userData.phone_number, email: userData.email, + phone_number: userData.phone_number, ou_id: userData.ou_id, ou_name: userData.ou_name, is_leader: userData.is_leader, user_role: userRole }; + + const frontendJWT = JWTUtils.generateJWT(jwtUserInfo, mockTokenExpiresIn); + + // 构建增强的用户信息对象 + const enhancedUserInfo = { + ...userData, + user_id: userData.user_id, + user_role: userRole, + frontend_jwt: frontendJWT + }; - // 创建会话 - const session = await sessionStorage.getSession(); - session.set("isAuthenticated", true); - session.set("userRole", userRole); - session.set("userInfo", userInfo); - - const cookie = await sessionStorage.commitSession(session); - - // console.log("账号密码登录成功 - 用户:", userData.username); - // console.log("账号密码登录成功 - 角色:", userRole); - // console.log("账号密码登录成功 - 重定向到:", redirectTo); - - return new Response(null, { - status: 302, - headers: { - Location: redirectTo, - "Set-Cookie": cookie, - }, + // 使用统一的session创建函数 + return createUserSession({ + isAuthenticated: true, + userRole: userRole, + redirectTo, + accessToken: mockAccessToken, + refreshToken: mockRefreshToken, + tokenExpiresIn: mockTokenExpiresIn, + userInfo: enhancedUserInfo, + frontendJWT }); } else { // 登录失败,返回错误信息 diff --git a/app/api/login/oauth-client.ts b/app/api/login/oauth-client.ts index 43d36e2..916b655 100644 --- a/app/api/login/oauth-client.ts +++ b/app/api/login/oauth-client.ts @@ -72,6 +72,7 @@ export class OAuthClient { * @returns 访问令牌响应 */ async getAccessToken(code: string): Promise { + console.log('this.config.serverUrl', this.config.serverUrl); const url = `${this.config.serverUrl}/oauth/token`; const data = new URLSearchParams({ grant_type: 'authorization_code', diff --git a/app/components/layout/Sidebar.tsx b/app/components/layout/Sidebar.tsx index b1e898d..ab4b5b3 100644 --- a/app/components/layout/Sidebar.tsx +++ b/app/components/layout/Sidebar.tsx @@ -45,6 +45,7 @@ export function Sidebar({ onToggle, collapsed, userRole, selectedApp = '' }: Sid const fetchUserRoutes = async () => { setIsLoadingRoutes(true); try { + console.log('userRole', userRole); const roleKey = mapUserRoleToRoleKey(userRole); const result = await getUserRoutesByRole(roleKey); diff --git a/app/routes/cross-checking._index.tsx b/app/routes/cross-checking._index.tsx index 1367586..81150b5 100644 --- a/app/routes/cross-checking._index.tsx +++ b/app/routes/cross-checking._index.tsx @@ -72,7 +72,7 @@ export async function loader({ request }: LoaderFunctionArgs) { const { getUserSession } = await import("~/api/login/auth.server"); const { userInfo, frontendJWT } = await getUserSession(request); - console.log('frontendJWT', frontendJWT); + // console.log('frontendJWT', frontendJWT); // 获取任务列表和统计数据,传递用户信息和JWT const [tasksResponse, statsResponse] = await Promise.all([ @@ -80,7 +80,7 @@ export async function loader({ request }: LoaderFunctionArgs) { getCrossCheckingStats(userInfo, frontendJWT) ]); - console.log('tasksResponse', tasksResponse.data?.tasks); + // console.log('tasksResponse', tasksResponse.data?.tasks); if (!tasksResponse.success) { console.error('获取任务列表失败:', tasksResponse.error); diff --git a/app/routes/rules._index.tsx b/app/routes/rules._index.tsx index b27780e..a936ad2 100644 --- a/app/routes/rules._index.tsx +++ b/app/routes/rules._index.tsx @@ -202,10 +202,10 @@ export default function RulesIndex() { // 检查用户是否为开发者角色 const userRole = rootData?.userRole || 'common'; - const isDeveloper = userRole === 'developer'; + const isDeveloper = userRole === 'admin'; // 在组件渲染时初始化状态 - // useEffect(() => { + // useEffect(() => { // setFilteredRules(initialRules); // setFilteredTotalCount(initialTotalCount); // setRuleTypes(initialRuleTypes);