webdev-service / components /auth /RoleGuard.tsx
underrate's picture
Initial commit
34ed5b1 verified
Raw
History Blame Contribute Delete
1.12 kB
"use client"
import { useSession } from "next-auth/react"
import { useRouter } from "next/navigation"
import { useEffect } from "react"
import { RoleType } from "@/types/auth"
interface RoleGuardProps {
children: React.ReactNode
allowedRoles: RoleType[]
}
export function RoleGuard({ children, allowedRoles }: RoleGuardProps) {
const { data: session, status } = useSession()
const router = useRouter()
useEffect(() => {
if (status === "loading") return
if (!session) {
router.push("/admin/login")
return
}
const userRole = (session.user as any).role as RoleType
if (!allowedRoles.includes(userRole)) {
router.push("/unauthorized")
}
}, [session, status, router, allowedRoles])
if (status === "loading") {
return <div>Loading...</div>
}
if (!session) {
return null
}
const userRole = (session.user as any).role as RoleType
if (!allowedRoles.includes(userRole)) {
return null
}
return <>{children}</>
}