From 7c1abba38b5fb4f11549f0ba90ec4c14ae465815 Mon Sep 17 00:00:00 2001 From: Matt Rubens Date: Thu, 12 Jun 2025 22:58:57 -0400 Subject: [PATCH] Allow members to view shared tasks (#101) * Allow members to view shared tasks * Remove unnecessary client side logging --- src/app/(authenticated)/audit-logs/page.tsx | 11 +++++++++- src/app/(authenticated)/layout.tsx | 21 ++++--------------- src/app/(authenticated)/providers/page.tsx | 11 +++++++++- src/app/(authenticated)/settings/page.tsx | 11 +++++++++- .../(authenticated)/share/[token]/page.tsx | 2 -- src/app/(authenticated)/usage/page.tsx | 9 ++++++-- 6 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/app/(authenticated)/audit-logs/page.tsx b/src/app/(authenticated)/audit-logs/page.tsx index 80e50388ec..07488bbc2b 100644 --- a/src/app/(authenticated)/audit-logs/page.tsx +++ b/src/app/(authenticated)/audit-logs/page.tsx @@ -1,5 +1,14 @@ +import { redirect } from 'next/navigation'; +import { auth } from '@clerk/nextjs/server'; import { AuditLogs } from './AuditLogs'; -export default function Page() { +export default async function Page() { + const { orgRole } = await auth(); + + // Only admins can access audit logs + if (orgRole !== 'org:admin') { + redirect('/usage'); + } + return ; } diff --git a/src/app/(authenticated)/layout.tsx b/src/app/(authenticated)/layout.tsx index 866ff54c1c..ac9062ce43 100644 --- a/src/app/(authenticated)/layout.tsx +++ b/src/app/(authenticated)/layout.tsx @@ -6,7 +6,6 @@ import { setSentryOrganizationContext, } from '@/lib/server/sentry-context'; import { NavbarHeader, NavbarMenu, Section } from '@/components/layout'; -import { Usage } from './usage/Usage'; export default async function AuthenticatedLayout({ children, @@ -32,25 +31,13 @@ export default async function AuthenticatedLayout({ } } - // Members get access to usage page only, filtered to their own data - if (orgRole === 'org:member' || (orgRole && orgRole !== 'org:admin')) { - return ( - <> - - -
-
- -
-
- - ); - } - return ( <> - +
{children}
diff --git a/src/app/(authenticated)/providers/page.tsx b/src/app/(authenticated)/providers/page.tsx index 0a1976ed3e..42e8550dfe 100644 --- a/src/app/(authenticated)/providers/page.tsx +++ b/src/app/(authenticated)/providers/page.tsx @@ -1,5 +1,14 @@ +import { redirect } from 'next/navigation'; +import { auth } from '@clerk/nextjs/server'; import { ProviderSettings } from './ProviderSettings'; -export default function Page() { +export default async function Page() { + const { orgRole } = await auth(); + + // Only admins can access provider settings + if (orgRole !== 'org:admin') { + redirect('/usage'); + } + return ; } diff --git a/src/app/(authenticated)/settings/page.tsx b/src/app/(authenticated)/settings/page.tsx index 976a68be6e..a8b90b05b7 100644 --- a/src/app/(authenticated)/settings/page.tsx +++ b/src/app/(authenticated)/settings/page.tsx @@ -1,6 +1,15 @@ +import { redirect } from 'next/navigation'; +import { auth } from '@clerk/nextjs/server'; import { SettingsPage } from './SettingsPage'; -export default function Settings() { +export default async function Settings() { + const { orgRole } = await auth(); + + // Only admins can access settings + if (orgRole !== 'org:admin') { + redirect('/usage'); + } + return ; } diff --git a/src/app/(authenticated)/share/[token]/page.tsx b/src/app/(authenticated)/share/[token]/page.tsx index a36f9c49c5..1dd200f638 100644 --- a/src/app/(authenticated)/share/[token]/page.tsx +++ b/src/app/(authenticated)/share/[token]/page.tsx @@ -44,8 +44,6 @@ export default async function SharedTaskPage({ params }: SharedTaskPageProps) { ); } catch (error) { - console.error('Error loading shared task:', error); - // Check if it's an access denied error if (error instanceof Error && error.message.includes('Access denied')) { return ( diff --git a/src/app/(authenticated)/usage/page.tsx b/src/app/(authenticated)/usage/page.tsx index 0c4c472467..de015f1bb2 100644 --- a/src/app/(authenticated)/usage/page.tsx +++ b/src/app/(authenticated)/usage/page.tsx @@ -2,7 +2,12 @@ import { auth } from '@clerk/nextjs/server'; import { Usage } from './Usage'; export default async function Page() { - const { userId } = await auth(); + const { userId, orgRole } = await auth(); - return ; + return ( + + ); }