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: {
id: user[0].users.id,
name: user[0].users.name,
role: user[0].roles?.code,
permissions: Array.from(permissions),
},
});

View File

@ -6,11 +6,12 @@ interface AuthContextType {
id: string;
name: string;
permissions: string[];
role: string;
} | null;
accessToken: string | null;
saveAuthData: (
userData: NonNullable<AuthContextType["user"]>,
accessToken?: NonNullable<AuthContextType["accessToken"]>
userData: { id: string; name: string; permissions: string[]; role: string },
accessToken?: string
) => void;
clearAuthData: () => void;
checkPermission: (permission: string) => boolean;
@ -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) {
// Redirect based on user role
const userRole = JSON.parse(localStorage.getItem('userRole') || '{}');
if (userRole === 'super-admin') {
navigate({
to: "/dashboard",
to: "/users",
replace: true,
});
} else {
navigate({
to: "/assessmentRequest",
replace: true,
});
}
}
}, [navigate, isAuthenticated]);
@ -70,26 +79,24 @@ export default function LoginPage() {
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");
},
});