Revert "pig update: decentralization, format date time"
All checks were successful
Build and Release / release (push) Successful in 27s
All checks were successful
Build and Release / release (push) Successful in 27s
This reverts commit 49b99289bb.
This commit is contained in:
@@ -1,62 +0,0 @@
|
||||
"use client"
|
||||
|
||||
import { ReactNode, useEffect } from "react"
|
||||
import { useRouter } from "next/navigation"
|
||||
import { useAuth } from "@/hooks/useAuth"
|
||||
import { UserRole } from "@/config/routes.config"
|
||||
|
||||
interface ProtectedRouteProps {
|
||||
children: ReactNode
|
||||
requiredRoles?: UserRole[]
|
||||
fallback?: ReactNode
|
||||
}
|
||||
|
||||
/**
|
||||
* Component để protect routes dựa trên role
|
||||
* Sử dụng ở client-side trong layouts hoặc pages
|
||||
*/
|
||||
export const ProtectedRoute: React.FC<ProtectedRouteProps> = ({
|
||||
children,
|
||||
requiredRoles = [],
|
||||
fallback,
|
||||
}) => {
|
||||
const router = useRouter()
|
||||
const { isAuthenticated, userRoles, hasAnyRole } = useAuth()
|
||||
|
||||
useEffect(() => {
|
||||
if (!isAuthenticated) {
|
||||
router.replace("/signin")
|
||||
}
|
||||
}, [isAuthenticated, router])
|
||||
|
||||
if (!isAuthenticated) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (requiredRoles.length > 0 && !hasAnyRole(requiredRoles)) {
|
||||
if (fallback) {
|
||||
return <>{fallback}</>
|
||||
}
|
||||
router.replace("/error-403")
|
||||
return null
|
||||
}
|
||||
|
||||
return <>{children}</>
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper để render UI dựa trên role
|
||||
*/
|
||||
export const RoleGate: React.FC<{
|
||||
requiredRoles: UserRole[]
|
||||
children: ReactNode
|
||||
fallback?: ReactNode
|
||||
}> = ({ requiredRoles, children, fallback }) => {
|
||||
const { hasAnyRole } = useAuth()
|
||||
|
||||
if (!hasAnyRole(requiredRoles)) {
|
||||
return <>{fallback || null}</>
|
||||
}
|
||||
|
||||
return <>{children}</>
|
||||
}
|
||||
@@ -12,7 +12,6 @@ import { API, HOME_URL } from "../../../api";
|
||||
import { setUserData } from "@/store/features/userSlice";
|
||||
import { useDispatch } from "react-redux";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { saveUserToCookie } from "@/lib/cookieStorage";
|
||||
|
||||
export default function SignInForm() {
|
||||
const router = useRouter();
|
||||
@@ -74,9 +73,7 @@ export default function SignInForm() {
|
||||
|
||||
// console.log("Current User Data:", data);
|
||||
if (data?.data) {
|
||||
// Lưu user data vào Redux và cookies
|
||||
dispatch(setUserData(data.data));
|
||||
saveUserToCookie(data.data);
|
||||
router.push("/");
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -4,11 +4,14 @@ import Link from "next/link";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Dropdown } from "../ui/dropdown/Dropdown";
|
||||
import { DropdownItem } from "../ui/dropdown/DropdownItem";
|
||||
import { fullDataUser } from "@/interface/admin";
|
||||
import { UserMetaCardProps } from "@/interface/user";
|
||||
import { apiGetCurrentUser, apiLogout } from "@/service/auth";
|
||||
import { removeUserFromCookie } from "@/lib/cookieStorage";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
export default function UserDropdown() {
|
||||
const router = useRouter();
|
||||
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const [user, setUser] = useState<UserMetaCardProps | null>(null);
|
||||
const [loading, setLoading] = useState<boolean>(true);
|
||||
@@ -44,9 +47,6 @@ export default function UserDropdown() {
|
||||
} catch (error) {
|
||||
console.error("Logout failed", error);
|
||||
} finally {
|
||||
// Xóa user data từ cookies
|
||||
removeUserFromCookie();
|
||||
|
||||
localStorage.clear();
|
||||
sessionStorage.clear();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user