diff --git a/web/app/[workspaceSlug]/(projects)/settings/layout.tsx b/web/app/[workspaceSlug]/(projects)/settings/layout.tsx index 79acb3ef9b4..6e947c4877b 100644 --- a/web/app/[workspaceSlug]/(projects)/settings/layout.tsx +++ b/web/app/[workspaceSlug]/(projects)/settings/layout.tsx @@ -1,34 +1,51 @@ "use client"; -import { ReactNode } from "react"; +import { FC, ReactNode } from "react"; +import { observer } from "mobx-react"; // components import { AppHeader } from "@/components/core"; // local components import { WorkspaceSettingHeader } from "./header"; import { MobileWorkspaceSettingsTabs } from "./mobile-header-tabs"; import { WorkspaceSettingsSidebar } from "./sidebar"; +import { NotAuthorizedView } from "@/components/auth-screens"; +import { useUserPermissions } from "@/hooks/store"; +import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/user-permissions"; export interface IWorkspaceSettingLayout { children: ReactNode; } -export default function WorkspaceSettingLayout(props: IWorkspaceSettingLayout) { +const WorkspaceSettingLayout: FC = observer((props) => { const { children } = props; + const { workspaceUserInfo, allowPermissions } = useUserPermissions(); + + // derived values + const isWorkspaceAdmin = allowPermissions([EUserPermissions.ADMIN], EUserPermissionsLevel.WORKSPACE); + return ( <> } />
-
- -
-
-
- {children} -
-
+ {workspaceUserInfo && !isWorkspaceAdmin ? ( + + ) : ( + <> +
+ +
+
+
+ {children} +
+
+ + )}
); -} +}); + +export default WorkspaceSettingLayout; diff --git a/web/ce/constants/workspace.ts b/web/ce/constants/workspace.ts index 51b876cfe28..b976111b559 100644 --- a/web/ce/constants/workspace.ts +++ b/web/ce/constants/workspace.ts @@ -9,7 +9,7 @@ export const WORKSPACE_SETTINGS = { key: "general", label: "General", href: `/settings`, - access: [EUserPermissions.ADMIN, EUserPermissions.MEMBER, EUserPermissions.GUEST], + access: [EUserPermissions.ADMIN], highlight: (pathname: string, baseUrl: string) => pathname === `${baseUrl}/settings/`, Icon: SettingIcon, }, @@ -17,7 +17,7 @@ export const WORKSPACE_SETTINGS = { key: "members", label: "Members", href: `/settings/members`, - access: [EUserPermissions.ADMIN, EUserPermissions.MEMBER], + access: [EUserPermissions.ADMIN], highlight: (pathname: string, baseUrl: string) => pathname === `${baseUrl}/settings/members/`, Icon: SettingIcon, }, diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/web/core/components/workspace/sidebar/dropdown.tsx index a4d8f572bf5..60d2bf7525c 100644 --- a/web/core/components/workspace/sidebar/dropdown.tsx +++ b/web/core/components/workspace/sidebar/dropdown.tsx @@ -15,7 +15,8 @@ import { IWorkspace } from "@plane/types"; import { Avatar, Loader, TOAST_TYPE, setToast } from "@plane/ui"; import { GOD_MODE_URL, cn } from "@/helpers/common.helper"; // hooks -import { useAppTheme, useUser, useUserProfile, useWorkspace } from "@/hooks/store"; +import { useAppTheme, useUser, useUserPermissions, useUserProfile, useWorkspace } from "@/hooks/store"; +import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/user-permissions"; import { WorkspaceLogo } from "../logo"; // Static Data @@ -25,12 +26,14 @@ const userLinks = (workspaceSlug: string) => [ name: "Workspace invites", href: "/invitations", icon: Mails, + access: [EUserPermissions.ADMIN, EUserPermissions.MEMBER, EUserPermissions.GUEST], }, { key: "settings", name: "Workspace settings", href: `/${workspaceSlug}/settings`, icon: Settings, + access: [EUserPermissions.ADMIN], }, ]; @@ -46,6 +49,7 @@ export const SidebarDropdown = observer(() => { signOut, } = useUser(); const { updateUserProfile } = useUserProfile(); + const { allowPermissions } = useUserPermissions(); const isUserInstanceAdmin = false; const { currentWorkspace: activeWorkspace, workspaces } = useWorkspace(); @@ -168,7 +172,7 @@ export const SidebarDropdown = observer(() => { alt="Workspace Logo" /> ) : ( - workspace?.name?.charAt(0) ?? "..." + (workspace?.name?.charAt(0) ?? "...") )}
{ Create workspace - {userLinks(workspaceSlug?.toString() ?? "").map((link, index) => ( - { - if (index > 0) handleItemClick(); - }} - > - - - {link.name} - - - ))} + {userLinks(workspaceSlug?.toString() ?? "").map( + (link, index) => + allowPermissions(link.access, EUserPermissionsLevel.WORKSPACE) && ( + { + if (index > 0) handleItemClick(); + }} + > + + + {link.name} + + + ) + )}