From b5caa759803a607cd9ba585263ec322039f46203 Mon Sep 17 00:00:00 2001 From: beo3000 Date: Sun, 4 Jan 2026 10:01:07 +0100 Subject: [PATCH] =?UTF-8?q?K21=20fertig.=20=C3=84nderungen:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. AuthState.cs:68 - IsClubTreasurer Property hinzugefügt 2. AuthState.cs:100,116,123,132 - Initial + WithPermissions um Treasurer erweitert 3. NavMenu.razor:25-48 - Kassenbuch NavGroup mit 3 Links: - Übersicht (/cashbook) - Kategorien (/cashbook/categories) - Berichte (/cashbook/reports) Sichtbar für: Kassenwart, Admin, SuperAdmin --- docs/IMPLEMENTATION_PLAN.md | 2 +- .../Components/Layout/NavMenu.razor | 23 +++++++++++++++++++ src/Koogle.Web/Store/AuthState/AuthState.cs | 9 ++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/IMPLEMENTATION_PLAN.md b/docs/IMPLEMENTATION_PLAN.md index f338c16..257e392 100644 --- a/docs/IMPLEMENTATION_PLAN.md +++ b/docs/IMPLEMENTATION_PLAN.md @@ -1719,7 +1719,7 @@ public enum CashBookEntryType { Income = 0, Expense = 1 } | ✓ | K18 | Web | Export Controller | 1 | | ✓ | K19 | Web | Membership Fees Feature | 2 | | ✓ | K20 | Web | Club Settings Extension | 3 | -| ☐ | K21 | Web | Navigation Integration | 1 | +| ✓ | K21 | Web | Navigation Integration | 1 | | ☐ | K22 | Tests | Unit Tests | 2 | | ☐ | K23 | Tests | Integration Tests | 1 | diff --git a/src/Koogle.Web/Components/Layout/NavMenu.razor b/src/Koogle.Web/Components/Layout/NavMenu.razor index ac6dd54..24a1814 100644 --- a/src/Koogle.Web/Components/Layout/NavMenu.razor +++ b/src/Koogle.Web/Components/Layout/NavMenu.razor @@ -22,7 +22,30 @@ Spieltage + @if (AuthState.Value.IsClubTreasurer || AuthState.Value.IsClubAdmin || AuthState.Value.IsSuperAdmin) + { + + + Übersicht + + + Kategorien + + + + Berichte + + + } @if (AuthState.Value.IsClubAdmin || AuthState.Value.IsSuperAdmin) { diff --git a/src/Koogle.Web/Store/AuthState/AuthState.cs b/src/Koogle.Web/Store/AuthState/AuthState.cs index d393088..0e393e1 100644 --- a/src/Koogle.Web/Store/AuthState/AuthState.cs +++ b/src/Koogle.Web/Store/AuthState/AuthState.cs @@ -62,6 +62,11 @@ public record AuthState /// public bool IsClubAdmin { get; set; } + /// + /// Whether the user is a Club Treasurer (Kassenwart). + /// + public bool IsClubTreasurer { get; set; } + /// /// Whether the user is a Club Editor. /// @@ -92,6 +97,7 @@ public record AuthState AvailableClubs = [], IsSuperAdmin = false, IsClubAdmin = false, + IsClubTreasurer = false, IsClubEditor = false, IsClubViewer = false, Roles = [], @@ -107,12 +113,14 @@ public record AuthState { var isSuperAdmin = roles.Contains(UserRole.SuperAdmin); var isClubAdmin = roles.Contains(UserRole.Admin); + var isClubTreasurer = roles.Contains(UserRole.Treasurer); var isClubEditor = roles.Contains(UserRole.Editor); var isClubViewer = roles.Contains(UserRole.Viewer); var highestRole = string.Empty; if (isSuperAdmin) highestRole = UserRole.SuperAdmin; else if (isClubAdmin) highestRole = UserRole.Admin; + else if (isClubTreasurer) highestRole = UserRole.Treasurer; else if (isClubEditor) highestRole = UserRole.Editor; else highestRole = UserRole.Viewer; @@ -121,6 +129,7 @@ public record AuthState Roles = roles, IsSuperAdmin = isSuperAdmin, IsClubAdmin = isClubAdmin, + IsClubTreasurer = isClubTreasurer, IsClubEditor = isClubEditor, IsClubViewer = isClubViewer, HighestRole = highestRole