import * as Tooltip from '@radix-ui/react-tooltip' import type { PostgresPolicy } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { noop } from 'lodash' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import Panel from 'components/ui/Panel' import { useAuthConfigQuery } from 'data/auth/auth-config-query' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { Badge, Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, IconEdit, IconMoreVertical, IconTrash, } from 'ui' interface PolicyRowProps { policy: PostgresPolicy onSelectEditPolicy: (policy: PostgresPolicy) => void onSelectDeletePolicy: (policy: PostgresPolicy) => void } const PolicyRow = ({ policy, onSelectEditPolicy = noop, onSelectDeletePolicy = noop, }: PolicyRowProps) => { const canUpdatePolicies = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'policies') const { project } = useProjectContext() const { data: authConfig } = useAuthConfigQuery({ projectRef: project?.ref }) // TODO(km): Simple check for roles that allow authenticated access. // In the future, we'll use splinter to return proper warnings for policies that allow anonymous user access. const appliesToAnonymousUsers = authConfig?.EXTERNAL_ANONYMOUS_USERS_ENABLED && (policy.roles.includes('authenticated') || policy.roles.includes('public')) return (

{policy.command}

{policy.name}

{appliesToAnonymousUsers ? ( Applies to anonymous users ) : null}

Applied to:

{policy.roles.slice(0, 3).map((role, i) => ( {role} ))} {policy.roles.length > 3 && ( + {policy.roles.length - 3} more roles )}
{policy.roles.slice(3).join(', ')}
{canUpdatePolicies ? (
) } export default PolicyRow