From 04927b2ef80a95d11f3532068c5fe94befb22c94 Mon Sep 17 00:00:00 2001 From: Diego Madero Islas Date: Mon, 18 May 2026 21:41:35 -0600 Subject: [PATCH] Refine admin/setup repository contracts --- app/admin/modules/page.tsx | 20 ++--- app/admin/page.tsx | 18 ++--- app/admin/setup/page.tsx | 22 ++---- app/customers/page.tsx | 5 +- app/entry/page.tsx | 5 +- app/login/page.tsx | 7 +- app/page.tsx | 23 +++--- app/setup/page.tsx | 3 +- components/app-shell.tsx | 15 ++-- components/primary-nav.tsx | 41 +++------- components/setup/onboarding-quick-start.tsx | 3 +- lib/application-planes.ts | 74 +++++++++++++++++ lib/server/actions/admin-core.ts | 70 ++++++++-------- lib/server/actions/entry-bootstrap.ts | 88 ++++++++------------- lib/server/application-access.ts | 17 ++++ lib/server/demo-data.ts | 7 +- lib/server/persistence/context.ts | 48 ++++++++++- lib/server/persistence/contracts.ts | 7 ++ 18 files changed, 280 insertions(+), 193 deletions(-) create mode 100644 lib/application-planes.ts create mode 100644 lib/server/application-access.ts diff --git a/app/admin/modules/page.tsx b/app/admin/modules/page.tsx index d4c0122..f9b3951 100644 --- a/app/admin/modules/page.tsx +++ b/app/admin/modules/page.tsx @@ -1,19 +1,13 @@ -import { redirect } from 'next/navigation'; +import { skossCoreRoutes } from '@/lib/application-planes'; import { moduleRegistry } from '@/lib/modules'; -import { getCurrentUserContext } from '@/lib/server/auth'; -import { readAppData } from '@/lib/server/persistence'; +import { requireAdminPlaneAccess } from '@/lib/server/application-access'; +import { readPersistence } from '@/lib/server/persistence'; import { updateModuleRegistryAction } from '@/lib/server/actions'; export default async function AdminModulesPage({ searchParams }: { searchParams?: Promise<{ saved?: string }> }) { - const [userContext, data, params] = await Promise.all([getCurrentUserContext(), readAppData(), searchParams]); - - if (!userContext.currentUser) { - redirect('/login?redirectTo=/admin/modules'); - } - - if (!userContext.canManageSettings) { - redirect('/'); - } + await requireAdminPlaneAccess(skossCoreRoutes.adminModules); + const [persistence, params] = await Promise.all([readPersistence(), searchParams]); + const moduleStates = persistence.instance.getInstanceState().moduleStates ?? {}; return (
@@ -25,7 +19,7 @@ export default async function AdminModulesPage({ searchParams }: { searchParams? {params?.saved === 'modules' ?

Module settings updated.

: null}
{moduleRegistry.map((module) => { - const enabled = module.required || data.instance.moduleStates?.[module.id] !== false; + const enabled = module.required || moduleStates[module.id] !== false; return (