Wrap admin pages with AdminGuard component

The AdminGuard component has been added to the AccountPage, AccountsPage, and AdminPage in the web app. This server-side implementation ensures that these pages are only accessible to super-admin users. If a user is not a super-admin, the guard will trigger a redirect to a 404 page.
This commit is contained in:
giancarlo
2024-04-08 14:39:02 +08:00
parent 4655f56143
commit 45417fe2c5
4 changed files with 19 additions and 4 deletions

View File

@@ -1,3 +1,7 @@
export default function AccountPage() {
import { AdminGuard } from '@kit/admin/components/admin-guard';
function AccountPage() {
return <div></div>;
}
export default AdminGuard(AccountPage);

View File

@@ -1,6 +1,7 @@
import { AdminGuard } from '@kit/admin/components/admin-guard';
import { PageBody, PageHeader } from '@kit/ui/page';
export default function AccountsPage() {
function AccountsPage() {
return (
<>
<PageHeader title={'Accounts'} />
@@ -8,3 +9,5 @@ export default function AccountsPage() {
</>
);
}
export default AdminGuard(AccountsPage);

View File

@@ -1,7 +1,8 @@
import { AdminDashboard } from '@kit/admin/components/admin-dashboard';
import { AdminGuard } from '@kit/admin/components/admin-guard';
import { PageBody, PageHeader } from '@kit/ui/page';
export default function AdminPage() {
function AdminPage() {
return (
<>
<PageHeader title={'Admin'} description={`Your SaaS stats at a glance`} />
@@ -12,3 +13,5 @@ export default function AdminPage() {
</>
);
}
export default AdminGuard(AdminPage);

View File

@@ -2,10 +2,15 @@ import { notFound } from 'next/navigation';
import { getSupabaseServerComponentClient } from '@kit/supabase/server-component-client';
import { isSuperAdmin } from '../lib/is-super-admin';
import { isSuperAdmin } from '../lib/server/is-super-admin';
type LayoutOrPageComponent<Params> = React.ComponentType<Params>;
/**
* AdminGuard is a server component wrapper that checks if the user is a super-admin before rendering the component.
* If the user is not a super-admin, we redirect to a 404.
* @param Component - The Page or Layout component to wrap
*/
export function AdminGuard<Params extends object>(
Component: LayoutOrPageComponent<Params>,
) {