From 1c4332da1b4bc818a4af8d98492828267b143acd Mon Sep 17 00:00:00 2001 From: mamadoudicko Date: Wed, 26 Jul 2023 12:09:56 +0200 Subject: [PATCH] feat: prevent viewer to access people tab --- .../components/PeopleTab/PeopleTab.tsx | 15 +++++++++++++++ frontend/lib/components/BrainUsers/BrainUsers.tsx | 2 +- frontend/lib/hooks/useShareBrain.ts | 14 +++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/PeopleTab/PeopleTab.tsx b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/PeopleTab/PeopleTab.tsx index bf969027a..289bc1a5b 100644 --- a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/PeopleTab/PeopleTab.tsx +++ b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/PeopleTab/PeopleTab.tsx @@ -24,8 +24,23 @@ export const PeopleTab = ({ brainId }: ShareBrainModalProps): JSX.Element => { addNewRoleAssignationRole, sendingInvitation, canAddNewRow, + hasShareBrainRights, } = useShareBrain(brainId); + if (!hasShareBrainRights) { + return ( +
+
+ Oh no! + + You {"don't"} have the necessary role to access this tab 🧠💡🥲. + +

Please require access from the owner.

+
+
+ ); + } + return ( <>
{ } if (brainUsers.length === 0) { - return

No brainUsers

; + return

No user

; } return ( diff --git a/frontend/lib/hooks/useShareBrain.ts b/frontend/lib/hooks/useShareBrain.ts index 1123781bd..95288a6c7 100644 --- a/frontend/lib/hooks/useShareBrain.ts +++ b/frontend/lib/hooks/useShareBrain.ts @@ -7,7 +7,13 @@ import { useBrainApi } from "@/lib/api/brain/useBrainApi"; import { useToast } from "@/lib/hooks"; import { generateBrainAssignation } from "../components/NavBar/components/NavItems/components/BrainsDropDown/components/BrainActions/components/ShareBrain/utils/generateBrainAssignation"; -import { BrainRoleAssignation } from "../components/NavBar/components/NavItems/components/BrainsDropDown/components/BrainActions/types"; +import { + BrainRoleAssignation, + BrainRoleType, +} from "../components/NavBar/components/NavItems/components/BrainsDropDown/components/BrainActions/types"; +import { useBrainContext } from "../context/BrainProvider/hooks/useBrainContext"; + +const requiredAccessToShareBrain: BrainRoleType[] = ["Owner", "Editor"]; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export const useShareBrain = (brainId: string) => { @@ -23,6 +29,11 @@ export const useShareBrain = (brainId: string) => { const { publish } = useToast(); const { addBrainSubscriptions } = useBrainApi(); + const { allBrains } = useBrainContext(); + const hasShareBrainRights = requiredAccessToShareBrain.includes( + allBrains.find((brain) => brain.id === brainId)?.role ?? "Viewer" + ); + const handleCopyInvitationLink = async () => { await navigator.clipboard.writeText(brainShareLink); publish({ @@ -119,5 +130,6 @@ export const useShareBrain = (brainId: string) => { setIsShareModalOpen, isShareModalOpen, canAddNewRow, + hasShareBrainRights, }; };