Pull Request branch dev-clone to main #1
|
|
@ -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),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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");
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user