From 067fc132cbbac4f6455d90e5203d5b28fea26e5d Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Sun, 23 Aug 2026 22:24:43 +0200 Subject: [PATCH] feat(c4,arch-006): plugin route renderer enforces manifest permission via protected route --- .../src/components/plugins/PluginRouteRenderer.tsx | 11 ++++++++++- frontend/src/store/pluginStore.ts | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/plugins/PluginRouteRenderer.tsx b/frontend/src/components/plugins/PluginRouteRenderer.tsx index c4822fb..72b5be9 100644 --- a/frontend/src/components/plugins/PluginRouteRenderer.tsx +++ b/frontend/src/components/plugins/PluginRouteRenderer.tsx @@ -2,6 +2,7 @@ import { useMemo } from 'react'; import { useLocation } from 'react-router-dom'; import { Loader2 } from 'lucide-react'; import { usePluginStore } from '@/store/pluginStore'; +import { ProtectedRoute } from '@/components/common/ProtectedRoute'; import { PluginPage } from './PluginLoader'; /** @@ -43,12 +44,20 @@ export function PluginRouteRenderer() { ); const pluginName = plugin?.display_name || plugin?.name || matchedRoute.path; - return ( + const page = ( ); + + // ARCH-006: enforce the manifest permission like the static routes do. + // Empty permission = any authenticated user (route is already inside the + // protected route group). + if (matchedRoute.permission) { + return {page}; + } + return page; } // If manifests haven't loaded yet, show a spinner (not null/blank) diff --git a/frontend/src/store/pluginStore.ts b/frontend/src/store/pluginStore.ts index 86d2ccd..5736465 100644 --- a/frontend/src/store/pluginStore.ts +++ b/frontend/src/store/pluginStore.ts @@ -17,6 +17,7 @@ export interface PluginPageRoute { parent: string; protected: boolean; order: number; + permission?: string; } export interface PluginDetailTab {