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

@ -2,19 +2,20 @@ import { ReactNode } from "@tanstack/react-router";
import { createContext, useState } from "react"; import { createContext, useState } from "react";
interface AuthContextType { interface AuthContextType {
user: { user: {
id: string; id: string;
name: string; name: string;
permissions: string[]; permissions: string[];
} | null; role: string;
accessToken: string | null; } | null;
saveAuthData: ( accessToken: string | null;
userData: NonNullable<AuthContextType["user"]>, saveAuthData: (
accessToken?: NonNullable<AuthContextType["accessToken"]> userData: { id: string; name: string; permissions: string[]; role: string },
) => void; accessToken?: string
clearAuthData: () => void; ) => void;
checkPermission: (permission: string) => boolean; clearAuthData: () => void;
isAuthenticated: boolean; checkPermission: (permission: string) => boolean;
isAuthenticated: boolean;
} }
export const AuthContext = createContext<AuthContextType | undefined>( export const AuthContext = createContext<AuthContextType | undefined>(
@ -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) {
navigate({ // Redirect based on user role
to: "/dashboard", const userRole = JSON.parse(localStorage.getItem('userRole') || '{}');
replace: true, if (userRole === 'super-admin') {
}); navigate({
to: "/users",
replace: true,
});
} else {
navigate({
to: "/assessmentRequest",
replace: true,
});
}
} }
}, [navigate, isAuthenticated]); }, [navigate, isAuthenticated]);
@ -63,33 +72,31 @@ export default function LoginPage() {
const res = await client.auth.login.$post({ const res = await client.auth.login.$post({
form: values, form: values,
}); });
if (res.ok) { if (res.ok) {
return await res.json(); return await res.json();
} }
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");
}, },
}); });