From 4b0a844c9da9812a5587e1b0d9dd43fdd4b8b046 Mon Sep 17 00:00:00 2001 From: Adam Prins Date: Thu, 24 Jun 2021 13:01:26 -0400 Subject: [PATCH 1/3] add isAdmin check to Users Tab --- frontend/src/OrganizationDetails.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/frontend/src/OrganizationDetails.js b/frontend/src/OrganizationDetails.js index c96c6482ab..e791885819 100644 --- a/frontend/src/OrganizationDetails.js +++ b/frontend/src/OrganizationDetails.js @@ -27,6 +27,7 @@ import { useDocumentTitle } from './useDocumentTitle' export default function OrganizationDetails() { const { orgSlug } = useParams() const toast = useToast() + const isAdmin = true useDocumentTitle(`${orgSlug}`) @@ -85,9 +86,11 @@ export default function OrganizationDetails() { Domains - - Users - + {isAdmin && ( + + Users + + )} @@ -107,11 +110,13 @@ export default function OrganizationDetails() { - - - - - + {isAdmin && ( + + + + + + )} From 7e4a5719f7d6234574cf4be0a91d2d2804c2ec76 Mon Sep 17 00:00:00 2001 From: Adam Prins Date: Fri, 25 Jun 2021 10:35:55 -0400 Subject: [PATCH 2/3] add API support --- frontend/mocking/faked_schema.js | 5 +++- frontend/src/OrganizationDetails.js | 28 +++++++++++++++++-- .../src/__tests__/OrganizationDetails.test.js | 14 +++++++++- frontend/src/graphql/queries.js | 6 ++++ 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/frontend/mocking/faked_schema.js b/frontend/mocking/faked_schema.js index 80c49c405f..177b299604 100644 --- a/frontend/mocking/faked_schema.js +++ b/frontend/mocking/faked_schema.js @@ -96,7 +96,10 @@ export const getTypeNames = () => gql` ): SharedUser # Query used to check if the user has an admin role. - isUserAdmin: Boolean + isUserAdmin( + # The organization that you want to check for admin permissions on. + orgId: ID! + ): Boolean # Query used to check if the user has a super admin role. isUserSuperAdmin: Boolean diff --git a/frontend/src/OrganizationDetails.js b/frontend/src/OrganizationDetails.js index e791885819..dbd3ae516a 100644 --- a/frontend/src/OrganizationDetails.js +++ b/frontend/src/OrganizationDetails.js @@ -14,7 +14,7 @@ import { Tabs, useToast, } from '@chakra-ui/core' -import { ORG_DETAILS_PAGE } from './graphql/queries' +import { ORG_DETAILS_PAGE, IS_USER_ADMIN } from './graphql/queries' import { Link as RouteLink, useParams } from 'react-router-dom' import { OrganizationSummary } from './OrganizationSummary' import { ErrorBoundary } from 'react-error-boundary' @@ -27,7 +27,6 @@ import { useDocumentTitle } from './useDocumentTitle' export default function OrganizationDetails() { const { orgSlug } = useParams() const toast = useToast() - const isAdmin = true useDocumentTitle(`${orgSlug}`) @@ -47,6 +46,31 @@ export default function OrganizationDetails() { }, }) + const orgId = data?.organization?.id + const { data: isAdminData } = useQuery(IS_USER_ADMIN, { + skip: !orgId, + variables: { orgId: orgId }, + + onError: (error) => { + const [_, message] = error.message.split(': ') + toast({ + title: 'Error', + description: message, + status: 'error', + duration: 9000, + isClosable: true, + position: 'top-left', + }) + }, + }) + + let isAdmin = false + if (isAdminData?.isUserAdmin) { + isAdmin = isAdminData.isUserAdmin + + } + console.log("isAdmin: " + isAdmin) + let orgName = '' if (data?.organization) { orgName = data.organization.name diff --git a/frontend/src/__tests__/OrganizationDetails.test.js b/frontend/src/__tests__/OrganizationDetails.test.js index bbfa5b5ccd..109c0a9e60 100644 --- a/frontend/src/__tests__/OrganizationDetails.test.js +++ b/frontend/src/__tests__/OrganizationDetails.test.js @@ -4,7 +4,7 @@ import { MockedProvider } from '@apollo/client/testing' import { MemoryRouter, Route } from 'react-router-dom' import { theme, ThemeProvider } from '@chakra-ui/core' import { UserVarProvider } from '../UserState' -import { ORG_DETAILS_PAGE } from '../graphql/queries' +import { ORG_DETAILS_PAGE, IS_USER_ADMIN } from '../graphql/queries' import { I18nProvider } from '@lingui/react' import { setupI18n } from '@lingui/core' import OrganizationDetails from '../OrganizationDetails' @@ -110,6 +110,17 @@ describe('', () => { }, }, }, + { + request: { + query: IS_USER_ADMIN, + variables: { orgId: 'ODk3MDg5MzI2MA==' }, + }, + result: { + data: { + isUserAdmin: true, + }, + }, + }, ] const { getByText } = render( @@ -139,6 +150,7 @@ describe('', () => { await waitFor(() => { expect(getByText(name)).toBeInTheDocument() + expect(getByText('Users')).toBeInTheDocument() }) }) }) diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index 5ac369cdd6..eaab58cfe2 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -1368,3 +1368,9 @@ export const IS_USER_SUPER_ADMIN = gql` isUserSuperAdmin } ` + +export const IS_USER_ADMIN = gql` + query IsUserAdmin($orgId: ID!) { + isUserAdmin(orgId: $orgId) + } +` From 6e2a68a1f0a60cc3ff750eb50b2cb55ab6fd08cb Mon Sep 17 00:00:00 2001 From: Adam Prins Date: Wed, 30 Jun 2021 09:14:21 -0400 Subject: [PATCH 3/3] Remove console.log --- frontend/src/OrganizationDetails.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/frontend/src/OrganizationDetails.js b/frontend/src/OrganizationDetails.js index dbd3ae516a..f3fc73d1dc 100644 --- a/frontend/src/OrganizationDetails.js +++ b/frontend/src/OrganizationDetails.js @@ -67,9 +67,7 @@ export default function OrganizationDetails() { let isAdmin = false if (isAdminData?.isUserAdmin) { isAdmin = isAdminData.isUserAdmin - } - console.log("isAdmin: " + isAdmin) let orgName = '' if (data?.organization) {