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 {