From 5ed6eb401be7360eeb69781f2c36fdbf0faad2f2 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Thu, 12 Sep 2024 14:16:26 +0530 Subject: [PATCH] fix: page permission validation --- .../(detail)/[projectId]/pages/(detail)/header.tsx | 13 +++++++++++-- .../(detail)/[projectId]/pages/(list)/header.tsx | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx index 388fb5681d8..44ba6d7f5f0 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx @@ -15,10 +15,11 @@ import { PageEditInformationPopover } from "@/components/pages"; import { convertHexEmojiToDecimal } from "@/helpers/emoji.helper"; import { getPageName } from "@/helpers/page.helper"; // hooks -import { usePage, useProject } from "@/hooks/store"; +import { usePage, useProject, useUser, useUserPermissions } from "@/hooks/store"; import { usePlatformOS } from "@/hooks/use-platform-os"; // plane web components import { PageDetailsHeaderExtraActions } from "@/plane-web/components/pages"; +import { EUserPermissions, EUserPermissionsLevel } from "ee/constants/user-permissions"; export interface IPagesHeaderProps { showButton?: boolean; @@ -32,10 +33,17 @@ export const PageDetailsHeader = observer(() => { // store hooks const { currentProjectDetails, loader } = useProject(); const page = usePage(pageId?.toString() ?? ""); - const { name, logo_props, updatePageLogo } = page; + const { name, logo_props, updatePageLogo, owned_by } = page; + const { allowPermissions } = useUserPermissions(); + const { data: currentUser } = useUser(); // use platform const { isMobile } = usePlatformOS(); + const isAdmin = allowPermissions([EUserPermissions.ADMIN], EUserPermissionsLevel.PROJECT); + const isOwner = owned_by === currentUser?.id; + + const isEditable = isAdmin || isOwner; + const handlePageLogoUpdate = async (data: TLogoProps) => { if (data) { updatePageLogo(data) @@ -144,6 +152,7 @@ export const PageDetailsHeader = observer(() => { ? EmojiIconPickerTypes.EMOJI : EmojiIconPickerTypes.ICON } + disabled={!isEditable} /> diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx index 82a063c16f8..f42163b4d7e 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx @@ -26,7 +26,7 @@ export const PagesListHeader = observer(() => { const { setTrackElement } = useEventTracker(); const canUserCreatePage = allowPermissions( - [EUserPermissions.ADMIN, EUserPermissions.MEMBER], + [EUserPermissions.ADMIN, EUserPermissions.MEMBER, EUserPermissions.GUEST], EUserPermissionsLevel.PROJECT );