import { useParams } from 'common' import { UseFormReturn } from 'react-hook-form' import { Checkbox, cn, FormControl, FormDescription, FormField, FormItem, FormLabel, Tooltip, TooltipContent, TooltipTrigger, useWatch, } from 'ui' import { Admonition } from 'ui-patterns/Admonition' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { CreateProjectForm } from './ProjectCreation.schema' import { InlineLink } from '@/components/ui/InlineLink' import Panel from '@/components/ui/Panel' import { useTrackDefaultPrivilegesExposure } from '@/hooks/misc/useDataApiRevokeOnCreateDefault' import { DOCS_URL } from '@/lib/constants' interface SecurityOptionsProps { form: UseFormReturn layout?: 'vertical' | 'horizontal' surface: 'main' | 'vercel' } export const SecurityOptions = ({ form, layout = 'horizontal', surface }: SecurityOptionsProps) => { const { slug } = useParams() const dataApi = useWatch({ control: form.control, name: 'dataApi' }) const dataApiDefaultPrivileges = useWatch({ control: form.control, name: 'dataApiDefaultPrivileges', }) const hasUserModified = form.getFieldState('dataApiDefaultPrivileges', form.formState).isDirty useTrackDefaultPrivilegesExposure( surface === 'main' ? { surface: 'main', dataApiDefaultPrivileges: dataApiDefaultPrivileges ?? true, hasUserModified, } : { surface: 'vercel', orgSlug: slug, dataApiDefaultPrivileges: dataApiDefaultPrivileges ?? true, hasUserModified, } ) return (
( field.onChange(value === true)} />
Enable Data API Autogenerate a RESTful API for your public schema. Recommended if using a client library like{' '} supabase-js .
)} /> ( {dataApi ? ( field.onChange(value === true)} /> ) : ( Enable the Data API to configure default privileges. )}
Automatically expose new tables Grants privileges to Data API roles by default, exposing new tables.
We recommend disabling this to control access manually.
)} /> ( field.onChange(value === true)} />
Enable automatic RLS Create an event trigger that automatically enables Row Level Security on all new tables in the public schema.
)} /> {!dataApi && ( Disabling it means supabase-js and similar libraries can't query or mutate data. )}
) }