diff --git a/site/src/pages/AIBridgePage/RequestLogsPage/RequestLogsPage.tsx b/site/src/pages/AIBridgePage/RequestLogsPage/RequestLogsPage.tsx index 07d48e2c26..ee53cbbfde 100644 --- a/site/src/pages/AIBridgePage/RequestLogsPage/RequestLogsPage.tsx +++ b/site/src/pages/AIBridgePage/RequestLogsPage/RequestLogsPage.tsx @@ -1,8 +1,10 @@ import { paginatedInterceptions } from "api/queries/aiBridge"; import { useFilter } from "components/Filter/Filter"; import { useUserFilterMenu } from "components/Filter/UserFilter"; +import { useAuthenticated } from "hooks"; import { usePaginatedQuery } from "hooks/usePaginatedQuery"; import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility"; +import { RequirePermission } from "modules/permissions/RequirePermission"; import type { FC } from "react"; import { useSearchParams } from "react-router"; import { pageTitle } from "utils/page"; @@ -11,12 +13,21 @@ import { RequestLogsPageView } from "./RequestLogsPageView"; const RequestLogsPage: FC = () => { const feats = useFeatureVisibility(); - const isRequestLogsVisible = Boolean(feats.aibridge); + const { permissions } = useAuthenticated(); + + // Users are allowed to view their own request logs via the API, + // but this page is only visible if the feature is enabled and the user + // has the `viewAnyAIBridgeInterception` permission. + // (as its defined in the Admin settings dropdown). + const isEntitled = Boolean(feats.aibridge); + const hasPermission = permissions.viewAnyAIBridgeInterception; + const canViewRequestLogs = isEntitled && hasPermission; const [searchParams, setSearchParams] = useSearchParams(); - const interceptionsQuery = usePaginatedQuery( - paginatedInterceptions(searchParams), - ); + const interceptionsQuery = usePaginatedQuery({ + ...paginatedInterceptions(searchParams), + enabled: canViewRequestLogs, + }); const filter = useFilter({ searchParams, onSearchParamsChange: setSearchParams, @@ -42,12 +53,12 @@ const RequestLogsPage: FC = () => { }); return ( - <> + {pageTitle("Request Logs", "AI Bridge")} { }, }} /> - + ); };