From 1421b9c0af16acb68607427fb976fcdb87bd236c Mon Sep 17 00:00:00 2001 From: sean-brydon <55134778+sean-brydon@users.noreply.github.com> Date: Tue, 26 Apr 2022 09:48:17 +0100 Subject: [PATCH] Feat/impersonate users (#2503) Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> Co-authored-by: zomars --- apps/web/components/NavTabs.tsx | 57 ++++++++------- apps/web/components/SettingsShell.tsx | 12 ++- apps/web/components/Shell.tsx | 5 +- apps/web/components/ui/AdminRequired.tsx | 14 ++++ .../web/components/ui/ImpersonatingBanner.tsx | 34 +++++++++ .../impersonation/ImpersonationProvider.ts | 62 ++++++++++++++++ apps/web/pages/api/auth/[...nextauth].tsx | 13 +++- apps/web/pages/settings/admin.tsx | 73 +++++++++++++++++++ apps/web/public/static/locales/en/common.json | 6 +- packages/embeds/embed-react/tsconfig.json | 2 +- .../migration.sql | 21 ++++++ packages/prisma/schema.prisma | 17 +++++ packages/types/next-auth.d.ts | 3 + 13 files changed, 285 insertions(+), 34 deletions(-) create mode 100644 apps/web/components/ui/AdminRequired.tsx create mode 100644 apps/web/components/ui/ImpersonatingBanner.tsx create mode 100644 apps/web/ee/lib/impersonation/ImpersonationProvider.ts create mode 100644 apps/web/pages/settings/admin.tsx create mode 100644 packages/prisma/migrations/20220409155714_impersonate_users/migration.sql diff --git a/apps/web/components/NavTabs.tsx b/apps/web/components/NavTabs.tsx index b0946f04..373f8830 100644 --- a/apps/web/components/NavTabs.tsx +++ b/apps/web/components/NavTabs.tsx @@ -1,49 +1,52 @@ +import { AdminRequired } from "components/ui/AdminRequired"; import Link, { LinkProps } from "next/link"; import { useRouter } from "next/router"; -import React, { ElementType, FC } from "react"; +import React, { ElementType, FC, Fragment } from "react"; import classNames from "@lib/classNames"; -interface Props { +export interface NavTabProps { tabs: { name: string; href: string; icon?: ElementType; + adminRequired?: boolean; }[]; linkProps?: Omit; } -const NavTabs: FC = ({ tabs, linkProps }) => { +const NavTabs: FC = ({ tabs, linkProps }) => { const router = useRouter(); return ( <> -