added roll depending users

This commit is contained in:
2025-10-08 19:06:11 +02:00
parent 96a36d68a9
commit f4aaac4679
5 changed files with 358 additions and 216 deletions

View File

@@ -1,4 +1,4 @@
// frontend/src/contexts/AuthContext.tsx
// frontend/src/contexts/AuthContext.tsx - KORRIGIERT
import React, { createContext, useContext, useState, useEffect } from 'react';
import { authService, User, LoginRequest } from '../services/authService';
@@ -8,6 +8,7 @@ interface AuthContextType {
logout: () => void;
hasRole: (roles: string[]) => boolean;
loading: boolean;
refreshUser: () => void; // NEU: Force refresh
}
const AuthContext = createContext<AuthContextType | undefined>(undefined);
@@ -15,22 +16,44 @@ const AuthContext = createContext<AuthContextType | undefined>(undefined);
export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
const [refreshTrigger, setRefreshTrigger] = useState(0); // NEU: Refresh trigger
// User beim Start laden
useEffect(() => {
// User aus localStorage laden beim Start
const savedUser = authService.getCurrentUser();
if (savedUser) {
setUser(savedUser);
console.log('✅ User from localStorage:', savedUser.email);
}
setLoading(false);
}, []);
// NEU: User vom Server laden wenn nötig
useEffect(() => {
if (refreshTrigger > 0) {
const loadUserFromServer = async () => {
const serverUser = await authService.fetchCurrentUser();
if (serverUser) {
setUser(serverUser);
console.log('✅ User from server:', serverUser.email);
}
};
loadUserFromServer();
}
}, [refreshTrigger]);
const login = async (credentials: LoginRequest) => {
try {
console.log('🔄 Attempting login...');
const response = await authService.login(credentials);
setUser(response.user);
console.log('✅ Login successful, user set:', response.user.email);
// Force refresh der App
setRefreshTrigger(prev => prev + 1);
} catch (error) {
console.error('AuthContext: Login fehlgeschlagen', error);
console.error('❌ Login failed:', error);
throw error;
}
};
@@ -38,6 +61,11 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
const logout = () => {
authService.logout();
setUser(null);
console.log('✅ Logout completed');
};
const refreshUser = () => {
setRefreshTrigger(prev => prev + 1);
};
const hasRole = (roles: string[]) => {
@@ -49,7 +77,8 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
login,
logout,
hasRole,
loading
loading,
refreshUser // NEU
};
return (