diff --git a/dashboard/src/app/(inside)/client/page.tsx b/dashboard/src/app/(inside)/client/page.tsx index be59eba..42e0092 100644 --- a/dashboard/src/app/(inside)/client/page.tsx +++ b/dashboard/src/app/(inside)/client/page.tsx @@ -1,7 +1,10 @@ import { getOAuth2Api } from '@/ory/sdk/server'; -import { ClientDataTable } from '@/app/(inside)/client/data-table'; import { Button } from '@/components/ui/button'; import Link from 'next/link'; +import { checkPermission, requireSession } from '@/lib/action/authentication'; +import { permission, relation } from '@/lib/permission'; +import InsufficientPermission from '@/components/insufficient-permission'; +import { ClientDataTable } from '@/app/(inside)/client/data-table'; export interface FetchClientPageProps { pageSize: number; @@ -31,6 +34,12 @@ function parseTokens(link: string) { async function fetchClientPage({ pageSize, pageToken }: FetchClientPageProps) { 'use server'; + const session = await requireSession(); + const allowed = await checkPermission(permission.client.it, relation.access, session.identity!.id); + if (!allowed) { + throw Error('Unauthorised'); + } + const oAuth2Api = await getOAuth2Api(); const response = await oAuth2Api.listOAuth2Clients({ pageSize: pageSize, @@ -45,10 +54,16 @@ async function fetchClientPage({ pageSize, pageToken }: FetchClientPageProps) { export default async function ListClientPage() { + const session = await requireSession(); + const identityId = session.identity!.id; + + const pmAccessClient = await checkPermission(permission.client.it, relation.access, identityId); + const pmCreateClient = await checkPermission(permission.client.it, relation.create, identityId); + let pageSize = 100; let pageToken: string = '00000000-0000-0000-0000-000000000000'; - const initialFetch = await fetchClientPage({ pageSize, pageToken }); + const initialFetch = pmAccessClient && await fetchClientPage({ pageSize, pageToken }); return (
See and manage all OAuth2 clients registered with your Ory Hydra instance
- + { + pmCreateClient && ( + + ) + }