Pull Request branch dev-clone to main #1

Merged
gitea merged 429 commits from dev-clone into main 2024-12-23 09:31:34 +00:00
3 changed files with 36 additions and 24 deletions
Showing only changes of commit c2a7124cd2 - Show all commits

View File

@ -134,6 +134,7 @@ const authRoutes = new Hono<HonoEnv>()
user: { user: {
id: user[0].users.id, id: user[0].users.id,
name: user[0].users.name, name: user[0].users.name,
role: user[0].roles?.code,
permissions: Array.from(permissions), permissions: Array.from(permissions),
}, },
}); });

View File

@ -6,11 +6,12 @@ interface AuthContextType {
id: string; id: string;
name: string; name: string;
permissions: string[]; permissions: string[];
role: string;
} | null; } | null;
accessToken: string | null; accessToken: string | null;
saveAuthData: ( saveAuthData: (
userData: NonNullable<AuthContextType["user"]>, userData: { id: string; name: string; permissions: string[]; role: string },
accessToken?: NonNullable<AuthContextType["accessToken"]> accessToken?: string
) => void; ) => void;
clearAuthData: () => void; clearAuthData: () => void;
checkPermission: (permission: string) => boolean; checkPermission: (permission: string) => boolean;
@ -25,6 +26,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
const [userId, setUserId] = useState<string | null>(null); const [userId, setUserId] = useState<string | null>(null);
const [userName, setUserName] = useState<string | null>(null); const [userName, setUserName] = useState<string | null>(null);
const [permissions, setPermissions] = useState<string[] | null>(null); const [permissions, setPermissions] = useState<string[] | null>(null);
const [role, setRole] = useState<string | null>(null);
const [accessToken, setAccessToken] = useState<string | null>( const [accessToken, setAccessToken] = useState<string | null>(
localStorage.getItem("accessToken") localStorage.getItem("accessToken")
); );
@ -36,6 +38,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
setUserId(userData.id); setUserId(userData.id);
setUserName(userData.name); setUserName(userData.name);
setPermissions(userData.permissions); setPermissions(userData.permissions);
setRole(userData.role);
if (accessToken) { if (accessToken) {
setAccessToken(accessToken); setAccessToken(accessToken);
localStorage.setItem("accessToken", accessToken); localStorage.setItem("accessToken", accessToken);
@ -46,6 +49,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
setUserId(null); setUserId(null);
setUserName(null); setUserName(null);
setPermissions(null); setPermissions(null);
setRole(null);
setAccessToken(null); setAccessToken(null);
localStorage.removeItem("accessToken"); localStorage.removeItem("accessToken");
}; };
@ -60,7 +64,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
<AuthContext.Provider <AuthContext.Provider
value={{ value={{
user: userId user: userId
? { id: userId, name: userName!, permissions: permissions! } ? { id: userId, name: userName!, permissions: permissions!, role: role! }
: null, : null,
accessToken, accessToken,
saveAuthData, saveAuthData,

View File

@ -51,10 +51,19 @@ export default function LoginPage() {
useEffect(() => { useEffect(() => {
if (isAuthenticated) { if (isAuthenticated) {
// Redirect based on user role
const userRole = JSON.parse(localStorage.getItem('userRole') || '{}');
if (userRole === 'super-admin') {
navigate({ navigate({
to: "/dashboard", to: "/users",
replace: true, replace: true,
}); });
} else {
navigate({
to: "/assessmentRequest",
replace: true,
});
}
} }
}, [navigate, isAuthenticated]); }, [navigate, isAuthenticated]);
@ -70,26 +79,24 @@ export default function LoginPage() {
throw res; throw res;
}, },
onSuccess: (data) => { onSuccess: (data) => {
saveAuthData( saveAuthData(
{ {
id: data.user.id, id: data.user.id,
name: data.user.name, name: data.user.name,
permissions: data.user.permissions, permissions: data.user.permissions,
role: data.user.role || '',
}, },
data.accessToken data.accessToken
); );
localStorage.setItem('userRole', JSON.stringify(data.user.role));
}, },
onError: async (error) => { onError: async (error) => {
console.log("error!");
if (error instanceof Response) { if (error instanceof Response) {
const body = await error.json(); const body = await error.json();
setErrorMessage(body.message as string); setErrorMessage(body.message as string);
return; return;
} }
console.log("bukan error");
}, },
}); });