修复登录问题,sidebar修复用户角色的问题
This commit is contained in:
@@ -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];
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
// 登录失败,返回错误信息
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user