Harden access control and restore customer admin pages
This commit is contained in:
@@ -16,6 +16,7 @@ import UserManagementPage from "./pages/UserManagementPage";
|
||||
|
||||
function ProtectedRoutes() {
|
||||
const { user, ready } = useSession();
|
||||
const isAdmin = user?.role === "ADMIN";
|
||||
|
||||
if (!ready) {
|
||||
return <div className="empty-state">Sitzung wird geladen ...</div>;
|
||||
@@ -34,7 +35,7 @@ function ProtectedRoutes() {
|
||||
<Route path="/samples/:sampleId/anamnesis" element={<AnamnesisPage />} />
|
||||
<Route path="/samples/:sampleId/antibiogram" element={<AntibiogramPage />} />
|
||||
<Route path="/samples/:sampleId/therapy" element={<TherapyPage />} />
|
||||
<Route path="/admin" element={<Navigate to="/admin/landwirte" replace />} />
|
||||
<Route path="/admin" element={<Navigate to={isAdmin ? "/admin/landwirte" : "/admin/benutzer"} replace />} />
|
||||
<Route path="/admin/benutzer" element={<UserManagementPage />} />
|
||||
<Route path="/admin/landwirte" element={<AdministrationPage />} />
|
||||
<Route path="/admin/medikamente" element={<AdministrationPage />} />
|
||||
|
||||
@@ -21,19 +21,19 @@ function resolvePageTitle(pathname: string) {
|
||||
return "Probe bearbeiten";
|
||||
}
|
||||
if (pathname.startsWith("/admin/landwirte")) {
|
||||
return "Verwaltung | Landwirte";
|
||||
return "Die Verwaltung der Landwirte";
|
||||
}
|
||||
if (pathname.startsWith("/admin/benutzer")) {
|
||||
return "Verwaltung | Benutzer";
|
||||
}
|
||||
if (pathname.startsWith("/admin/medikamente")) {
|
||||
return "Verwaltung | Medikamente";
|
||||
return "Die Verwaltung der Medikamente";
|
||||
}
|
||||
if (pathname.startsWith("/admin/erreger")) {
|
||||
return "Verwaltung | Erreger";
|
||||
return "Die Verwaltung der Erreger";
|
||||
}
|
||||
if (pathname.startsWith("/admin/antibiogramm")) {
|
||||
return "Verwaltung | Antibiogramm";
|
||||
return "Die Verwaltung der Antibiogramme";
|
||||
}
|
||||
if (pathname.startsWith("/search/landwirt")) {
|
||||
return "Suche | Landwirt";
|
||||
@@ -79,9 +79,6 @@ export default function AppShell() {
|
||||
<div className="nav-group">
|
||||
<div className="nav-group__label">Verwaltung</div>
|
||||
<div className="nav-subnav">
|
||||
<NavLink to="/admin/benutzer" className={({ isActive }) => `nav-sublink ${isActive ? "is-active" : ""}`}>
|
||||
Benutzer
|
||||
</NavLink>
|
||||
<NavLink to="/admin/landwirte" className={({ isActive }) => `nav-sublink ${isActive ? "is-active" : ""}`}>
|
||||
Landwirte
|
||||
</NavLink>
|
||||
@@ -94,6 +91,9 @@ export default function AppShell() {
|
||||
<NavLink to="/admin/antibiogramm" className={({ isActive }) => `nav-sublink ${isActive ? "is-active" : ""}`}>
|
||||
Antibiogramm
|
||||
</NavLink>
|
||||
<NavLink to="/admin/benutzer" className={({ isActive }) => `nav-sublink ${isActive ? "is-active" : ""}`}>
|
||||
Benutzer
|
||||
</NavLink>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -26,6 +26,13 @@ const DATASET_LABELS: Record<DatasetKey, string> = {
|
||||
antibiotics: "Antibiogramm",
|
||||
};
|
||||
|
||||
const DATASET_TITLES: Record<DatasetKey, string> = {
|
||||
farmers: "Die Verwaltung der Landwirte",
|
||||
medications: "Die Verwaltung der Medikamente",
|
||||
pathogens: "Die Verwaltung der Erreger",
|
||||
antibiotics: "Die Verwaltung der Antibiogramme",
|
||||
};
|
||||
|
||||
function normalizeOverview(overview: AdministrationOverview): DatasetsState {
|
||||
return {
|
||||
farmers: overview.farmers.map((entry) => ({
|
||||
@@ -216,7 +223,7 @@ export default function AdministrationPage() {
|
||||
<section className="section-card section-card--hero">
|
||||
<div>
|
||||
<p className="eyebrow">Verwaltung</p>
|
||||
<h3>Stammdaten direkt pflegen</h3>
|
||||
<h3>{DATASET_TITLES[selectedDataset]}</h3>
|
||||
<p className="muted-text">
|
||||
Bestehende Datensaetze lassen sich inline aendern. Bei Umbenennungen bleibt der alte
|
||||
Satz inaktiv sichtbar.
|
||||
|
||||
Reference in New Issue
Block a user