This commit is contained in:
ryan
2026-07-13 15:17:45 +08:00
parent 08e61ce833
commit e0eb4e5975
334 changed files with 17212 additions and 12321 deletions
+32 -33
View File
@@ -1,16 +1,16 @@
"use client"
'use client';
import type {ReactNode} from "react"
import {Loader2} from "lucide-react"
import type { ReactNode } from 'react';
import { Loader2 } from 'lucide-react';
import {ErrorPage} from "@/components/layout/error"
import {useUser} from "@/contexts/user-context"
import { ErrorPage } from '@/components/layout/error';
import { useUser } from '@/contexts/user-context';
type RequireAuthProps = {
children: ReactNode
fallback?: ReactNode
minHeightClassName?: string
}
children: ReactNode;
fallback?: ReactNode;
minHeightClassName?: string;
};
/**
* Guards page content until the session user is available.
@@ -19,49 +19,48 @@ type RequireAuthProps = {
export function RequireAuth({
children,
fallback,
minHeightClassName = "min-h-[400px]",
minHeightClassName = 'min-h-[400px]',
}: RequireAuthProps) {
const {user, loading} = useUser()
const { user, loading } = useUser();
if (loading) {
return fallback ?? (
<div className={`flex items-center justify-center ${minHeightClassName}`}>
<Loader2 className="size-6 animate-spin text-primary" />
</div>
)
return (
fallback ?? (
<div
className={`flex items-center justify-center ${minHeightClassName}`}
>
<Loader2 className='size-6 animate-spin text-primary' />
</div>
)
);
}
if (!user) {
return null
return null;
}
return <>{children}</>
return <>{children}</>;
}
type RequireAdminAuthProps = {
children: ReactNode
}
children: ReactNode;
};
/** Guards admin routes after the shared shell has rendered. */
export function RequireAdminAuth({children}: RequireAdminAuthProps) {
const {user, loading} = useUser()
export function RequireAdminAuth({ children }: RequireAdminAuthProps) {
const { user, loading } = useUser();
if (loading) {
return (
<div className="flex min-h-[400px] items-center justify-center">
<Loader2 className="size-6 animate-spin text-primary" />
<div className='flex min-h-[400px] items-center justify-center'>
<Loader2 className='size-6 animate-spin text-primary' />
</div>
)
);
}
if (!user?.is_admin) {
return (
<ErrorPage
title="访问被拒绝"
message="您没有权限访问此页面"
/>
)
return <ErrorPage title='访问被拒绝' message='您没有权限访问此页面' />;
}
return <>{children}</>
}
return <>{children}</>;
}