@@ -6,6 +6,7 @@ import { SchemaRendererProvider } from '@object-ui/react';
66import { ObjectStackAdapter } from './dataSource' ;
77import type { ConnectionState } from './dataSource' ;
88import appConfig from '../objectstack.shared' ;
9+ import { AuthProvider , AuthGuard , useAuth } from '@object-ui/auth' ;
910
1011// Components
1112import { ConsoleLayout } from './components/ConsoleLayout' ;
@@ -19,12 +20,25 @@ import { PageView } from './components/PageView';
1920import { ReportView } from './components/ReportView' ;
2021import { ExpressionProvider } from './context/ExpressionProvider' ;
2122
23+ // Auth Pages
24+ import { LoginPage } from './pages/LoginPage' ;
25+ import { RegisterPage } from './pages/RegisterPage' ;
26+ import { ForgotPasswordPage } from './pages/ForgotPasswordPage' ;
27+
28+ // System Admin Pages
29+ import { UserManagementPage } from './pages/system/UserManagementPage' ;
30+ import { OrgManagementPage } from './pages/system/OrgManagementPage' ;
31+ import { RoleManagementPage } from './pages/system/RoleManagementPage' ;
32+ import { AuditLogPage } from './pages/system/AuditLogPage' ;
33+ import { ProfilePage } from './pages/system/ProfilePage' ;
34+
2235import { useParams } from 'react-router-dom' ;
2336import { ThemeProvider } from './components/theme-provider' ;
2437
2538export function AppContent ( ) {
2639 const [ dataSource , setDataSource ] = useState < ObjectStackAdapter | null > ( null ) ;
2740 const [ connectionState , setConnectionState ] = useState < ConnectionState > ( 'disconnected' ) ;
41+ const { user } = useAuth ( ) ;
2842
2943 // App Selection
3044 const navigate = useNavigate ( ) ;
@@ -132,7 +146,9 @@ export function AppContent() {
132146 ) ;
133147
134148 // Expression context for dynamic visibility/disabled/hidden expressions
135- const expressionUser = { name : 'John Doe' , email : 'admin@example.com' , role : 'admin' } ;
149+ const expressionUser = user
150+ ? { name : user . name , email : user . email , role : user . role ?? 'user' }
151+ : { name : 'Anonymous' , email : '' , role : 'guest' } ;
136152
137153 return (
138154 < ExpressionProvider user = { expressionUser } app = { activeApp } data = { { } } >
@@ -191,6 +207,13 @@ export function AppContent() {
191207 < Route path = "page/:pageName" element = {
192208 < PageView />
193209 } />
210+
211+ { /* System Administration Routes */ }
212+ < Route path = "system/users" element = { < UserManagementPage /> } />
213+ < Route path = "system/organizations" element = { < OrgManagementPage /> } />
214+ < Route path = "system/roles" element = { < RoleManagementPage /> } />
215+ < Route path = "system/audit-log" element = { < AuditLogPage /> } />
216+ < Route path = "system/profile" element = { < ProfilePage /> } />
194217 </ Routes >
195218 </ ErrorBoundary >
196219
@@ -268,12 +291,21 @@ function RootRedirect() {
268291export function App ( ) {
269292 return (
270293 < ThemeProvider defaultTheme = "system" storageKey = "object-ui-theme" >
271- < BrowserRouter basename = "/" >
272- < Routes >
273- < Route path = "/apps/:appName/*" element = { < AppContent /> } />
274- < Route path = "/" element = { < RootRedirect /> } />
275- </ Routes >
276- </ BrowserRouter >
294+ < AuthProvider authUrl = "/api/auth" >
295+ < BrowserRouter basename = "/" >
296+ < Routes >
297+ < Route path = "/login" element = { < LoginPage /> } />
298+ < Route path = "/register" element = { < RegisterPage /> } />
299+ < Route path = "/forgot-password" element = { < ForgotPasswordPage /> } />
300+ < Route path = "/apps/:appName/*" element = {
301+ < AuthGuard fallback = { < Navigate to = "/login" /> } loadingFallback = { < LoadingScreen /> } >
302+ < AppContent />
303+ </ AuthGuard >
304+ } />
305+ < Route path = "/" element = { < RootRedirect /> } />
306+ </ Routes >
307+ </ BrowserRouter >
308+ </ AuthProvider >
277309 </ ThemeProvider >
278310 ) ;
279311}
0 commit comments