修复登录问题,sidebar修复用户角色的问题

This commit is contained in:
2025-07-28 10:56:59 +08:00
parent 46febb97cb
commit 6727d62272
7 changed files with 43 additions and 35 deletions
+3 -3
View File
@@ -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<string, string> = {
'common': 'common',
'developer': 'admin',
'admin': 'admin',
'deptLeader': 'deptLeader',
'groupLeader': 'groupLeader'
};
return roleMapping[userRole] || 'common';
return roleMapping[userRole];
}
+1 -1
View File
@@ -200,7 +200,7 @@ export async function apiRequest<T>(
return getMockResponse<T>(endpoint);
}
console.log('api-base-url-----------',API_BASE_URL)
// console.log('api-base-url-----------',API_BASE_URL)
try {
// 构建 URL
+33 -27
View File
@@ -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 {
// 登录失败,返回错误信息
+1
View File
@@ -72,6 +72,7 @@ export class OAuthClient {
* @returns 访问令牌响应
*/
async getAccessToken(code: string): Promise<TokenResponse | null> {
console.log('this.config.serverUrl', this.config.serverUrl);
const url = `${this.config.serverUrl}/oauth/token`;
const data = new URLSearchParams({
grant_type: 'authorization_code',
+1
View File
@@ -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);
+2 -2
View File
@@ -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);
+2 -2
View File
@@ -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);