From dafcb54bff16336d864f91512fb44c3264c83879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20H=C3=B8jberg?= Date: Thu, 24 Apr 2025 15:24:17 -0400 Subject: [PATCH] Parse new `isSuperAdmin` on session --- src/UnisonShare/Account.elm | 7 +++++-- src/UnisonShare/Page/ErrorPage.elm | 2 +- src/UnisonShare/Session.elm | 11 +++++++++++ tests/e2e/TestHelpers/Data.ts | 1 + 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/UnisonShare/Account.elm b/src/UnisonShare/Account.elm index 1f36c229..a8d65768 100644 --- a/src/UnisonShare/Account.elm +++ b/src/UnisonShare/Account.elm @@ -19,6 +19,7 @@ type alias Account a = , pronouns : Maybe String , completedTours : List Tour , organizationMemberships : List OrganizationMembership + , isSuperAdmin : Bool } @@ -88,18 +89,20 @@ isProjectOwner projectRef account = decodeSummary : Decode.Decoder AccountSummary decodeSummary = let - makeSummary handle name_ avatarUrl completedTours organizationMemberships = + makeSummary handle name_ avatarUrl completedTours organizationMemberships isSuperAdmin = { handle = handle , name = name_ , avatarUrl = avatarUrl , pronouns = Nothing , completedTours = Maybe.withDefault [] completedTours , organizationMemberships = organizationMemberships + , isSuperAdmin = isSuperAdmin } in - Decode.map5 makeSummary + Decode.map6 makeSummary (field "handle" UserHandle.decodeUnprefixed) (maybe (field "name" string)) (maybe (field "avatarUrl" decodeUrl)) (maybe (field "completedTours" (Decode.list Tour.decode))) (field "organizationMemberships" (Decode.list (Decode.map OrganizationMembership UserHandle.decodeUnprefixed))) + (field "isSuperadmin" Decode.bool) diff --git a/src/UnisonShare/Page/ErrorPage.elm b/src/UnisonShare/Page/ErrorPage.elm index 5d0ae978..d840b1fe 100644 --- a/src/UnisonShare/Page/ErrorPage.elm +++ b/src/UnisonShare/Page/ErrorPage.elm @@ -17,7 +17,7 @@ view : Session -> Http.Error -> String -> String -> PageLayout msg view session error entityName className = let errorDetails = - if Session.isUnisonMember session then + if Session.isSuperAdmin session then details [] [ summary [] [ text "Error Details" ], div [] [ text (Util.httpErrorToString error) ] ] else diff --git a/src/UnisonShare/Session.elm b/src/UnisonShare/Session.elm index 118c471f..1432413e 100644 --- a/src/UnisonShare/Session.elm +++ b/src/UnisonShare/Session.elm @@ -7,6 +7,7 @@ module UnisonShare.Session exposing , isOrganizationMember , isProjectOwner , isSignedIn + , isSuperAdmin , isUnisonMember ) @@ -41,6 +42,16 @@ isSignedIn session = True +isSuperAdmin : Session -> Bool +isSuperAdmin session = + case session of + Anonymous -> + False + + SignedIn account_ -> + account_.isSuperAdmin + + isProjectOwner : ProjectRef -> Session -> Bool isProjectOwner projectRef session = isHandle (ProjectRef.handle projectRef) session diff --git a/tests/e2e/TestHelpers/Data.ts b/tests/e2e/TestHelpers/Data.ts index 8d47665a..ae00dfb0 100644 --- a/tests/e2e/TestHelpers/Data.ts +++ b/tests/e2e/TestHelpers/Data.ts @@ -5,6 +5,7 @@ function account(handle: string) { ...user(), handle, completedTours: ["welcome-terms"], + isSuperadmin: faker.datatype.boolean(), organizationMemberships: [], primaryEmail: faker.internet.email(), };