update: changes to the redirect page when the user login, it will be differentiated according to their role

This commit is contained in:
falendikategar 2024-10-29 09:37:01 +07:00
parent d7a08f4ef1
commit c2a7124cd2
3 changed files with 36 additions and 24 deletions

View File

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

View File

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

View File

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