From cac6b26a0d05207c91a3237f21c448004b084e13 Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Mon, 1 Jun 2026 15:23:34 +0200 Subject: [PATCH] Rechte: Benutzer-Verwaltung & Rechtegruppe je Mitarbeiter (Frontend) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UsersView: Benutzer-Liste + Anlegen (Rechtegruppen-Dropdown = nur erlaubte Gruppen), scope-gefiltert; Nav-Eintrag Benutzer (ab Firmen-Admin) - EmployeesView: Block 'Zugang/Rechtegruppe' im Bearbeiten-Dialog — Login anlegen/entfernen pro Mitarbeiter (delegationsgeprüft) Co-Authored-By: Claude Opus 4.8 --- frontend/src/layouts/DashboardLayout.vue | 1 + frontend/src/router/index.ts | 1 + frontend/src/views/EmployeesView.vue | 62 ++++++++++ frontend/src/views/UsersView.vue | 150 +++++++++++++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 frontend/src/views/UsersView.vue diff --git a/frontend/src/layouts/DashboardLayout.vue b/frontend/src/layouts/DashboardLayout.vue index 68dfb52..586bceb 100644 --- a/frontend/src/layouts/DashboardLayout.vue +++ b/frontend/src/layouts/DashboardLayout.vue @@ -16,6 +16,7 @@ const nav = computed(() => [ { label: 'Visitenkarten', to: '/app/card-editor', icon: 'M3 5h18v14H3zM3 10h18M7 15h5', show: true }, { label: 'Standorte', to: '/app/locations', icon: 'M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0zM12 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6z', show: auth.isCompanyAdmin || auth.isResellerAdmin }, { label: 'Domains', to: '/app/domains', icon: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18zM3 12h18M12 3a15 15 0 0 1 0 18 15 15 0 0 1 0-18z', show: auth.isCompanyAdmin || auth.isResellerAdmin }, + { label: 'Benutzer', to: '/app/users', icon: 'M17 21v-2a4 4 0 0 0-3-3.87M9 21v-2a4 4 0 0 0-3-3.87M12 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM23 11l-2 2-1-1', show: auth.isCompanyAdmin || auth.isResellerAdmin || auth.isPlatformAdmin }, { label: 'Design', to: '/app/design', icon: 'M12 2l7 7a7 7 0 1 1-14 0z', show: true }, { label: 'Einstellungen', to: '/app/settings', icon: 'M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6', show: true }, ].filter((i) => i.show)) diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 53bfef5..d8e5c7c 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -20,6 +20,7 @@ const router = createRouter({ { path: 'companies', name: 'companies', component: () => import('@/views/CompaniesView.vue') }, { path: 'employees', name: 'employees', component: () => import('@/views/EmployeesView.vue') }, { path: 'card-editor', name: 'card-editor', component: () => import('@/views/CardEditorView.vue') }, + { path: 'users', name: 'users', component: () => import('@/views/UsersView.vue') }, { path: 'locations', name: 'locations', component: () => import('@/views/LocationsView.vue') }, { path: 'domains', name: 'domains', component: () => import('@/views/DomainsView.vue') }, { path: 'design', name: 'design', component: () => import('@/views/DesignView.vue') }, diff --git a/frontend/src/views/EmployeesView.vue b/frontend/src/views/EmployeesView.vue index 1e4950a..a5093d4 100644 --- a/frontend/src/views/EmployeesView.vue +++ b/frontend/src/views/EmployeesView.vue @@ -1,9 +1,15 @@ + + + +