38 lines
933 B
TypeScript
38 lines
933 B
TypeScript
"use client";
|
|
|
|
import { useSession } from "next-auth/react";
|
|
|
|
import { useRouter } from "next/navigation";
|
|
|
|
import { useEffect } from "react";
|
|
|
|
import { hasPermission, Permission } from "../config/role";
|
|
|
|
export function useAuthSession(requireAuth = false) {
|
|
const { data: session, status, update } = useSession();
|
|
const router = useRouter();
|
|
const isLoading = status === "loading";
|
|
const isAuthenticated = status === "authenticated";
|
|
|
|
const checkPermission = (module: string, action: Permission) => {
|
|
const userRole = session?.user?.role;
|
|
if (!userRole) return false;
|
|
return hasPermission(userRole, module, action);
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (!isLoading && !isAuthenticated && requireAuth) {
|
|
router.push("/auth/signin");
|
|
}
|
|
}, [isLoading, isAuthenticated, requireAuth, router]);
|
|
|
|
return {
|
|
session,
|
|
isLoading,
|
|
isAuthenticated,
|
|
status,
|
|
checkPermission,
|
|
update,
|
|
};
|
|
}
|