Allow members to view shared tasks (#101)

* Allow members to view shared tasks

* Remove unnecessary client side logging
This commit is contained in:
Matt Rubens 2025-06-12 22:58:57 -04:00 committed by GitHub
parent 13701ab7d5
commit 7c1abba38b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 41 additions and 24 deletions

View file

@ -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 <AuditLogs />;
}

View file

@ -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 (
<>
<NavbarHeader className="h-[72px]" />
<NavbarMenu className="h-[72px]" userRole="member" />
<Section divider={false} className="min-h-[calc(100vh-72px-72px-2px)]">
<div className="flex flex-col gap-8 py-8">
<Usage userRole="member" currentUserId={userId} />
</div>
</Section>
</>
);
}
return (
<>
<NavbarHeader className="h-[72px]" />
<NavbarMenu className="h-[72px]" userRole="admin" />
<NavbarMenu
className="h-[72px]"
userRole={orgRole === 'org:admin' ? 'admin' : 'member'}
/>
<Section divider={false} className="min-h-[calc(100vh-72px-72px-2px)]">
<div className="flex flex-col gap-8 py-8">{children}</div>
</Section>

View file

@ -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 <ProviderSettings />;
}

View file

@ -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 <SettingsPage />;
}

View file

@ -44,8 +44,6 @@ export default async function SharedTaskPage({ params }: SharedTaskPageProps) {
</div>
);
} 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 (

View file

@ -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 <Usage userRole="admin" currentUserId={userId} />;
return (
<Usage
userRole={orgRole === 'org:admin' ? 'admin' : 'member'}
currentUserId={userId}
/>
);
}