Chore/swap use check permissions with use async check project permissions part 8 (Season Finale) (#38619)
* Update perms checking in audit logs * Deprecate useCheckPermissions, useIsPermissionsLoaded and useCheckProjectPermissions as they're no longer used * Rename useAsyncCheckProjectPermissions to useAsyncCheckPermissions * Fix TS
This commit is contained in:
@@ -14,7 +14,7 @@ import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useTableRowsCountQuery } from 'data/table-rows/table-rows-count-query'
|
||||
import { fetchAllTableRows, useTableRowsQuery } from 'data/table-rows/table-rows-query'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { RoleImpersonationState } from 'lib/role-impersonation'
|
||||
@@ -84,7 +84,7 @@ const DefaultHeader = () => {
|
||||
|
||||
const snap = useTableEditorTableStateSnapshot()
|
||||
const tableEditorSnap = useTableEditorStateSnapshot()
|
||||
const { can: canCreateColumns } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateColumns } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'columns'
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import { useParams } from 'common/hooks'
|
||||
import { DropdownMenuItemTooltip } from 'components/ui/DropdownMenuItemTooltip'
|
||||
import { useAPIKeyDeleteMutation } from 'data/api-keys/api-key-delete-mutation'
|
||||
import { APIKeysData } from 'data/api-keys/api-keys-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import TextConfirmModal from 'ui-patterns/Dialogs/TextConfirmModal'
|
||||
|
||||
interface APIKeyDeleteDialogProps {
|
||||
@@ -19,7 +19,7 @@ export const APIKeyDeleteDialog = ({ apiKey, lastSeen }: APIKeyDeleteDialogProps
|
||||
const { ref: projectRef } = useParams()
|
||||
const [isOpen, setIsOpen] = useState(false)
|
||||
|
||||
const { can: canDeleteAPIKeys } = useAsyncCheckProjectPermissions(
|
||||
const { can: canDeleteAPIKeys } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'*'
|
||||
)
|
||||
|
||||
@@ -11,7 +11,7 @@ import CopyButton from 'components/ui/CopyButton'
|
||||
import { useAPIKeyIdQuery } from 'data/api-keys/[id]/api-key-id-query'
|
||||
import { APIKeysData } from 'data/api-keys/api-keys-query'
|
||||
import { apiKeysKeys } from 'data/api-keys/keys'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Button, cn, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
|
||||
|
||||
export function ApiKeyPill({
|
||||
@@ -28,8 +28,10 @@ export function ApiKeyPill({
|
||||
const isSecret = apiKey.type === 'secret'
|
||||
|
||||
// Permission check for revealing/copying secret API keys
|
||||
const { can: canManageSecretKeys, isLoading: isLoadingPermission } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.READ, 'service_api_keys')
|
||||
const { can: canManageSecretKeys, isLoading: isLoadingPermission } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'service_api_keys'
|
||||
)
|
||||
|
||||
// This query only runs when show=true (enabled: show)
|
||||
// It fetches the fully revealed API key when needed
|
||||
|
||||
@@ -6,16 +6,16 @@ import { useParams } from 'common'
|
||||
import CopyButton from 'components/ui/CopyButton'
|
||||
import { FormHeader } from 'components/ui/Forms/FormHeader'
|
||||
import { useAPIKeysQuery } from 'data/api-keys/api-keys-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
cn,
|
||||
EyeOffIcon,
|
||||
Input_Shadcn_,
|
||||
Skeleton,
|
||||
WarningIcon,
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipTrigger,
|
||||
WarningIcon,
|
||||
} from 'ui'
|
||||
|
||||
// to add in later with follow up PR
|
||||
@@ -36,7 +36,7 @@ export const PublishableAPIKeys = () => {
|
||||
[apiKeysData]
|
||||
)
|
||||
|
||||
const { can: canReadAPIKeys, isLoading: isPermissionsLoading } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadAPIKeys, isLoading: isPermissionsLoading } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'*'
|
||||
)
|
||||
@@ -106,7 +106,7 @@ const ApiKeyInput = () => {
|
||||
[apiKeysData]
|
||||
)
|
||||
|
||||
const { can: canReadAPIKeys, isLoading: isPermissionsLoading } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadAPIKeys, isLoading: isPermissionsLoading } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'*'
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import AlertError from 'components/ui/AlertError'
|
||||
import { FormHeader } from 'components/ui/Forms/FormHeader'
|
||||
import { APIKeysData, useAPIKeysQuery } from 'data/api-keys/api-keys-query'
|
||||
import useLogsQuery from 'hooks/analytics/useLogsQuery'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Card, CardContent, EyeOffIcon, Skeleton, cn } from 'ui'
|
||||
import {
|
||||
Table,
|
||||
@@ -58,7 +58,7 @@ export const SecretAPIKeys = () => {
|
||||
isError: isErrorApiKeys,
|
||||
} = useAPIKeysQuery({ projectRef, reveal: false })
|
||||
|
||||
const { can: canReadAPIKeys, isLoading: isLoadingPermissions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadAPIKeys, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'*'
|
||||
)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { useMemo } from 'react'
|
||||
|
||||
import { useParams } from 'common'
|
||||
import { useAPIKeysQuery } from 'data/api-keys/api-keys-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
|
||||
interface ApiKeysVisibilityState {
|
||||
hasApiKeys: boolean
|
||||
@@ -19,7 +19,7 @@ interface ApiKeysVisibilityState {
|
||||
*/
|
||||
export function useApiKeysVisibility(): ApiKeysVisibilityState {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { can: canReadAPIKeys } = useAsyncCheckProjectPermissions(PermissionAction.READ, 'api_keys')
|
||||
const { can: canReadAPIKeys } = useAsyncCheckPermissions(PermissionAction.READ, 'api_keys')
|
||||
|
||||
const { data: apiKeysData, isLoading } = useAPIKeysQuery({
|
||||
projectRef,
|
||||
|
||||
@@ -12,7 +12,7 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import UpgradeToPro from 'components/ui/UpgradeToPro'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { IS_PLATFORM } from 'lib/constants'
|
||||
import {
|
||||
@@ -43,11 +43,11 @@ const FormSchema = z.object({
|
||||
export const AdvancedAuthSettingsForm = () => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { data: organization } = useSelectedOrganizationQuery()
|
||||
const { can: canReadConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -8,11 +8,10 @@ import { boolean, object } from 'yup'
|
||||
import { useParams } from 'common'
|
||||
import { ScaffoldSection, ScaffoldSectionTitle } from 'components/layouts/Scaffold'
|
||||
import { InlineLink } from 'components/ui/InlineLink'
|
||||
import { NoPermission } from 'components/ui/NoPermission'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useTablesQuery } from 'data/tables/tables-query'
|
||||
import { useCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
AlertDescription_Shadcn_,
|
||||
@@ -40,8 +39,11 @@ const AUDIT_LOG_ENTRIES_TABLE = 'audit_log_entries'
|
||||
export const AuditLogsForm = () => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { data: project } = useSelectedProjectQuery()
|
||||
const canReadConfig = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
|
||||
const canUpdateConfig = useCheckPermissions(PermissionAction.UPDATE, 'custom_config_gotrue')
|
||||
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
const { data: tables = [] } = useTablesQuery({
|
||||
projectRef: project?.ref,
|
||||
@@ -91,10 +93,6 @@ export const AuditLogsForm = () => {
|
||||
)
|
||||
}
|
||||
|
||||
if (!canReadConfig) {
|
||||
return <NoPermission resourceText="view audit logs settings" />
|
||||
}
|
||||
|
||||
return (
|
||||
<ScaffoldSection isFullWidth>
|
||||
<div className="space-y-4">
|
||||
|
||||
@@ -14,7 +14,7 @@ import type { components } from 'data/api'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useProjectSettingsV2Query } from 'data/config/project-settings-v2-query'
|
||||
import { useCustomDomainsQuery } from 'data/custom-domains/custom-domains-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { BASE_PATH } from 'lib/constants'
|
||||
import { Button, Form, Input, Sheet, SheetContent, SheetFooter, SheetHeader, SheetTitle } from 'ui'
|
||||
import { Admonition } from 'ui-patterns'
|
||||
@@ -38,7 +38,7 @@ export const ProviderForm = ({ config, provider, isActive }: ProviderFormProps)
|
||||
const [open, setOpen] = useState(false)
|
||||
const { mutate: updateAuthConfig, isLoading: isUpdatingConfig } = useAuthConfigUpdateMutation()
|
||||
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -13,7 +13,7 @@ import { InlineLink } from 'components/ui/InlineLink'
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import {
|
||||
AlertDescription_Shadcn_,
|
||||
@@ -54,11 +54,11 @@ export const BasicAuthSettingsForm = () => {
|
||||
} = useAuthConfigQuery({ projectRef })
|
||||
const { mutate: updateAuthConfig, isLoading: isUpdatingConfig } = useAuthConfigUpdateMutation()
|
||||
|
||||
const { can: canReadConfig, isSuccess: isPermissionsLoaded } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadConfig, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -11,7 +11,7 @@ import CodeEditor from 'components/ui/CodeEditor/CodeEditor'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useValidateSpamMutation, ValidateSpamResponse } from 'data/auth/validate-spam-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import type { FormSchema } from 'types'
|
||||
import {
|
||||
Button,
|
||||
@@ -40,7 +40,7 @@ interface TemplateEditorProps {
|
||||
|
||||
const TemplateEditor = ({ template }: TemplateEditorProps) => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import { ChevronDown } from 'lucide-react'
|
||||
import { useParams } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import {
|
||||
Button,
|
||||
@@ -33,10 +33,7 @@ export const AddHookDropdown = ({
|
||||
const { data: organization } = useSelectedOrganizationQuery()
|
||||
|
||||
const { data: authConfig } = useAuthConfigQuery({ projectRef })
|
||||
const { can: canUpdateAuthHook } = useAsyncCheckProjectPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'*'
|
||||
)
|
||||
const { can: canUpdateAuthHook } = useAsyncCheckPermissions(PermissionAction.AUTH_EXECUTE, '*')
|
||||
|
||||
const hooks: Hook[] = HOOKS_DEFINITIONS.map((definition) => {
|
||||
return {
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Check, Webhook } from 'lucide-react'
|
||||
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { DocsButton } from 'components/ui/DocsButton'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Badge, Input, copyToClipboard } from 'ui'
|
||||
import { Hook } from './hooks.constants'
|
||||
|
||||
@@ -13,10 +13,7 @@ interface HookCardProps {
|
||||
}
|
||||
|
||||
export const HookCard = ({ hook, onSelect }: HookCardProps) => {
|
||||
const { can: canUpdateAuthHook } = useAsyncCheckProjectPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'*'
|
||||
)
|
||||
const { can: canUpdateAuthHook } = useAsyncCheckPermissions(PermissionAction.AUTH_EXECUTE, '*')
|
||||
|
||||
return (
|
||||
<div className="bg-surface-100 border-default overflow-hidden border shadow px-5 py-4 flex flex-row first:rounded-t-md last:rounded-b-md space-x-4">
|
||||
|
||||
@@ -11,7 +11,7 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import UpgradeToPro from 'components/ui/UpgradeToPro'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { IS_PLATFORM } from 'lib/constants'
|
||||
import {
|
||||
@@ -96,11 +96,11 @@ export const MfaAuthSettingsForm = () => {
|
||||
|
||||
const [isConfirmationModalVisible, setIsConfirmationModalVisible] = useState(false)
|
||||
|
||||
const { can: canReadConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ import { UseFormReturn } from 'react-hook-form'
|
||||
|
||||
import { useDatabaseRolesQuery } from 'data/database-roles/database-roles-query'
|
||||
import { useTablesQuery } from 'data/tables/tables-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
Button,
|
||||
@@ -62,7 +62,7 @@ export const PolicyDetailsV2 = ({
|
||||
}: PolicyDetailsV2Props) => {
|
||||
const { data: project } = useSelectedProjectQuery()
|
||||
const [open, setOpen] = useState(false)
|
||||
const { can: canUpdatePolicies } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdatePolicies } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'tables'
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@ import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useDatabasePolicyUpdateMutation } from 'data/database-policies/database-policy-update-mutation'
|
||||
import { databasePoliciesKeys } from 'data/database-policies/keys'
|
||||
import { QueryResponseError, useExecuteSqlMutation } from 'data/sql/execute-sql-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
Button,
|
||||
@@ -67,7 +67,7 @@ export const PolicyEditorPanel = memo(function ({
|
||||
const queryClient = useQueryClient()
|
||||
const { data: selectedProject } = useSelectedProjectQuery()
|
||||
|
||||
const { can: canUpdatePolicies } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdatePolicies } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'tables'
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ import { Edit, MoreVertical, Trash } from 'lucide-react'
|
||||
|
||||
import { DropdownMenuItemTooltip } from 'components/ui/DropdownMenuItemTooltip'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state'
|
||||
import {
|
||||
@@ -37,7 +37,7 @@ export const PolicyRow = ({
|
||||
onSelectDeletePolicy = noop,
|
||||
}: PolicyRowProps) => {
|
||||
const aiSnap = useAiAssistantStateSnapshot()
|
||||
const { can: canUpdatePolicies } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdatePolicies } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'policies'
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ import { Lock, Table } from 'lucide-react'
|
||||
import { useParams } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { EditorTablePageLink } from 'data/prefetchers/project.$ref.editor.$id'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state'
|
||||
import { AiIconAnimation, Badge, CardTitle } from 'ui'
|
||||
|
||||
@@ -35,11 +35,11 @@ export const PolicyTableRowHeader = ({
|
||||
const { ref } = useParams()
|
||||
const aiSnap = useAiAssistantStateSnapshot()
|
||||
|
||||
const { can: canCreatePolicies } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreatePolicies } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'policies'
|
||||
)
|
||||
const { can: canToggleRLS } = useAsyncCheckProjectPermissions(
|
||||
const { can: canToggleRLS } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'tables'
|
||||
)
|
||||
|
||||
@@ -12,7 +12,7 @@ import { InlineLink } from 'components/ui/InlineLink'
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
AlertDescription_Shadcn_,
|
||||
AlertTitle_Shadcn_,
|
||||
@@ -80,11 +80,11 @@ export const ProtectionAuthSettingsForm = () => {
|
||||
})
|
||||
const [hidden, setHidden] = useState(true)
|
||||
|
||||
const { can: canReadConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -13,7 +13,7 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
Button,
|
||||
Card,
|
||||
@@ -32,11 +32,11 @@ import { isSmtpEnabled } from '../SmtpForm/SmtpForm.utils'
|
||||
|
||||
export const RateLimits = () => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
const { can: canReadConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Globe, Trash } from 'lucide-react'
|
||||
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { EmptyListState } from 'components/ui/States'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Button, Checkbox_Shadcn_ } from 'ui'
|
||||
import { ValueContainer } from './ValueContainer'
|
||||
|
||||
@@ -24,7 +24,7 @@ export const RedirectUrlList = ({
|
||||
onSelectRemoveURLs,
|
||||
onSelectClearSelection,
|
||||
}: RedirectUrlListProps) => {
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -11,7 +11,7 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import UpgradeToPro from 'components/ui/UpgradeToPro'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { IS_PLATFORM } from 'lib/constants'
|
||||
import {
|
||||
@@ -68,11 +68,11 @@ export const SessionsAuthSettingsForm = () => {
|
||||
const [isUpdatingRefreshTokens, setIsUpdatingRefreshTokens] = useState(false)
|
||||
const [isUpdatingUserSessions, setIsUpdatingUserSessions] = useState(false)
|
||||
|
||||
const { can: canReadConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -10,7 +10,7 @@ import { useParams } from 'common'
|
||||
import { ScaffoldSection, ScaffoldSectionTitle } from 'components/layouts/Scaffold'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
AlertDescription_Shadcn_,
|
||||
AlertTitle_Shadcn_,
|
||||
@@ -36,7 +36,7 @@ const SiteUrl = () => {
|
||||
const { mutate: updateAuthConfig } = useAuthConfigUpdateMutation()
|
||||
const [isUpdatingSiteUrl, setIsUpdatingSiteUrl] = useState(false)
|
||||
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -12,7 +12,7 @@ import { ScaffoldSection } from 'components/layouts/Scaffold'
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
|
||||
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
AlertDescription_Shadcn_,
|
||||
AlertTitle_Shadcn_,
|
||||
@@ -53,11 +53,11 @@ export const SmtpForm = () => {
|
||||
const [enableSmtp, setEnableSmtp] = useState(false)
|
||||
const [hidden, setHidden] = useState(true)
|
||||
|
||||
const { can: canReadConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
ThirdPartyAuthIntegration,
|
||||
useThirdPartyAuthIntegrationsQuery,
|
||||
} from 'data/third-party-auth/integrations-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { cn } from 'ui'
|
||||
import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
|
||||
import { AddIntegrationDropdown } from './AddIntegrationDropdown'
|
||||
@@ -49,7 +49,7 @@ export const ThirdPartyAuthForm = () => {
|
||||
useState<ThirdPartyAuthIntegration>()
|
||||
|
||||
const { mutateAsync: deleteIntegration } = useDeleteThirdPartyAuthIntegrationMutation()
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { ChevronDown, Mail, UserPlus } from 'lucide-react'
|
||||
import { useState } from 'react'
|
||||
|
||||
import { DropdownMenuItemTooltip } from 'components/ui/DropdownMenuItemTooltip'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from 'ui'
|
||||
import CreateUserModal from './CreateUserModal'
|
||||
@@ -12,11 +12,11 @@ import InviteUserModal from './InviteUserModal'
|
||||
export const AddUserDropdown = () => {
|
||||
const showSendInvitation = useIsFeatureEnabled('authentication:show_send_invitation')
|
||||
|
||||
const { can: canInviteUsers } = useAsyncCheckProjectPermissions(
|
||||
const { can: canInviteUsers } = useAsyncCheckPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'invite_user'
|
||||
)
|
||||
const { can: canCreateUsers } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateUsers } = useAsyncCheckPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'create_user'
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import * as z from 'zod'
|
||||
|
||||
import { useParams } from 'common'
|
||||
import { useUserCreateMutation } from 'data/auth/user-create-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
Button,
|
||||
Checkbox_Shadcn_,
|
||||
@@ -38,7 +38,7 @@ const CreateUserFormSchema = z.object({
|
||||
|
||||
const CreateUserModal = ({ visible, setVisible }: CreateUserModalProps) => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { can: canCreateUsers } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateUsers } = useAsyncCheckPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'create_user'
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import { toast } from 'sonner'
|
||||
|
||||
import { useParams } from 'common'
|
||||
import { useUserInviteMutation } from 'data/auth/user-invite-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Button, Form, Input, Modal } from 'ui'
|
||||
|
||||
export type InviteUserModalProps = {
|
||||
@@ -22,7 +22,7 @@ const InviteUserModal = ({ visible, setVisible }: InviteUserModalProps) => {
|
||||
setVisible(false)
|
||||
},
|
||||
})
|
||||
const { can: canInviteUsers } = useAsyncCheckProjectPermissions(
|
||||
const { can: canInviteUsers } = useAsyncCheckPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'invite_user'
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@ import { useUserSendMagicLinkMutation } from 'data/auth/user-send-magic-link-mut
|
||||
import { useUserSendOTPMutation } from 'data/auth/user-send-otp-mutation'
|
||||
import { useUserUpdateMutation } from 'data/auth/user-update-mutation'
|
||||
import { User } from 'data/auth/users-infinite-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import { BASE_PATH } from 'lib/constants'
|
||||
import { timeout } from 'lib/helpers'
|
||||
@@ -64,24 +64,21 @@ export const UserOverview = ({ user, onDeleteSuccess }: UserOverviewProps) => {
|
||||
}
|
||||
)
|
||||
|
||||
const { can: canUpdateUser } = useAsyncCheckProjectPermissions(PermissionAction.AUTH_EXECUTE, '*')
|
||||
const { can: canSendMagicLink } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateUser } = useAsyncCheckPermissions(PermissionAction.AUTH_EXECUTE, '*')
|
||||
const { can: canSendMagicLink } = useAsyncCheckPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'send_magic_link'
|
||||
)
|
||||
const { can: canSendRecovery } = useAsyncCheckProjectPermissions(
|
||||
const { can: canSendRecovery } = useAsyncCheckPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'send_recovery'
|
||||
)
|
||||
const { can: canSendOtp } = useAsyncCheckProjectPermissions(
|
||||
PermissionAction.AUTH_EXECUTE,
|
||||
'send_otp'
|
||||
)
|
||||
const { can: canRemoveUser } = useAsyncCheckProjectPermissions(
|
||||
const { can: canSendOtp } = useAsyncCheckPermissions(PermissionAction.AUTH_EXECUTE, 'send_otp')
|
||||
const { can: canRemoveUser } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_DELETE,
|
||||
'auth.users'
|
||||
)
|
||||
const { can: canRemoveMFAFactors } = useAsyncCheckProjectPermissions(
|
||||
const { can: canRemoveMFAFactors } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_DELETE,
|
||||
'auth.mfa_factors'
|
||||
)
|
||||
|
||||
@@ -6,7 +6,7 @@ import { useParams } from 'common'
|
||||
import ShimmeringLoader from 'components/ui/ShimmeringLoader'
|
||||
import { useOrganizationPaymentMethodsQuery } from 'data/organizations/organization-payment-methods-query'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Button } from 'ui'
|
||||
import CreditCard from './CreditCard'
|
||||
|
||||
@@ -31,7 +31,7 @@ const CurrentPaymentMethod = () => {
|
||||
|
||||
const defaultPaymentMethod = paymentMethods?.data.find((pm) => pm.is_default)
|
||||
|
||||
const { can: canReadPaymentMethods } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadPaymentMethods } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.payment_methods'
|
||||
)
|
||||
|
||||
@@ -19,7 +19,7 @@ import PartnerManagedResource from 'components/ui/PartnerManagedResource'
|
||||
import ShimmeringLoader from 'components/ui/ShimmeringLoader'
|
||||
import { useOrganizationPaymentMethodsQuery } from 'data/organizations/organization-payment-methods-query'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { MANAGED_BY } from 'lib/constants/infrastructure'
|
||||
import { getURL } from 'lib/helpers'
|
||||
@@ -44,9 +44,11 @@ const PaymentMethods = () => {
|
||||
isSuccess,
|
||||
} = useOrganizationPaymentMethodsQuery({ slug })
|
||||
|
||||
const { can: canReadPaymentMethods, isSuccess: isPermissionsLoaded } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.payment_methods')
|
||||
const { can: canUpdatePaymentMethods } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadPaymentMethods, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.payment_methods'
|
||||
)
|
||||
const { can: canUpdatePaymentMethods } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_WRITE,
|
||||
'stripe.payment_methods'
|
||||
)
|
||||
|
||||
@@ -27,7 +27,7 @@ import { projectKeys } from 'data/projects/keys'
|
||||
import { DesiredInstanceSize, instanceSizeSpecs } from 'data/projects/new-project.constants'
|
||||
import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { BASE_PATH, IS_PLATFORM } from 'lib/constants'
|
||||
@@ -72,7 +72,7 @@ export const CreateBranchModal = () => {
|
||||
const gitlessBranching = useIsBranching2Enabled()
|
||||
const allowDataBranching = useFlag('allowDataBranching')
|
||||
|
||||
const { can: canCreateBranch } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateBranch } = useAsyncCheckPermissions(
|
||||
PermissionAction.CREATE,
|
||||
'preview_branches'
|
||||
)
|
||||
|
||||
@@ -23,7 +23,7 @@ import { useBranchResetMutation } from 'data/branches/branch-reset-mutation'
|
||||
import { useBranchUpdateMutation } from 'data/branches/branch-update-mutation'
|
||||
import type { Branch } from 'data/branches/branches-query'
|
||||
import { branchKeys } from 'data/branches/keys'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
Button,
|
||||
DropdownMenu,
|
||||
@@ -169,11 +169,11 @@ const PreviewBranchActions = ({
|
||||
const queryClient = useQueryClient()
|
||||
const projectRef = branch.parent_project_ref ?? branch.project_ref
|
||||
|
||||
const { can: canDeleteBranches } = useAsyncCheckProjectPermissions(
|
||||
const { can: canDeleteBranches } = useAsyncCheckPermissions(
|
||||
PermissionAction.DELETE,
|
||||
'preview_branches'
|
||||
)
|
||||
const { can: canUpdateBranches } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateBranches } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'preview_branches'
|
||||
)
|
||||
@@ -387,7 +387,7 @@ const PreviewBranchActions = ({
|
||||
// Actions for main (production) branch
|
||||
const MainBranchActions = ({ branch, repo }: { branch: Branch; repo: string }) => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { can: canUpdateBranches } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateBranches } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'preview_branches'
|
||||
)
|
||||
|
||||
@@ -9,7 +9,7 @@ import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import Panel from 'components/ui/Panel'
|
||||
import { getKeys, useAPIKeysQuery } from 'data/api-keys/api-keys-query'
|
||||
import { useProjectSettingsV2Query } from 'data/config/project-settings-v2-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { PROJECT_STATUS } from 'lib/constants'
|
||||
@@ -99,7 +99,7 @@ export const Connect = () => {
|
||||
)
|
||||
|
||||
const { data: settings } = useProjectSettingsV2Query({ projectRef }, { enabled: showConnect })
|
||||
const { can: canReadAPIKeys } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadAPIKeys } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'service_api_keys'
|
||||
)
|
||||
|
||||
@@ -6,7 +6,7 @@ import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { InlineLink } from 'components/ui/InlineLink'
|
||||
import { useBackupDownloadMutation } from 'data/database/backup-download-mutation'
|
||||
import type { DatabaseBackup } from 'data/database/backups-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Badge, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
|
||||
import { TimestampInfo } from 'ui-patterns'
|
||||
|
||||
@@ -19,7 +19,7 @@ interface BackupItemProps {
|
||||
|
||||
export const BackupItem = ({ index, isHealthy, backup, onSelectBackup }: BackupItemProps) => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { can: canTriggerScheduledBackups } = useAsyncCheckProjectPermissions(
|
||||
const { can: canTriggerScheduledBackups } = useAsyncCheckPermissions(
|
||||
PermissionAction.INFRA_EXECUTE,
|
||||
'queue_job.restore.prepare'
|
||||
)
|
||||
|
||||
@@ -6,7 +6,7 @@ import { useParams } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { FormPanel } from 'components/ui/Forms/FormPanel'
|
||||
import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { getPITRRetentionDuration } from './PITR.utils'
|
||||
|
||||
const PITRNotice = ({}) => {
|
||||
@@ -14,7 +14,7 @@ const PITRNotice = ({}) => {
|
||||
const { data: addonsResponse } = useProjectAddonsQuery({ projectRef })
|
||||
const retentionPeriod = getPITRRetentionDuration(addonsResponse?.selected_addons ?? [])
|
||||
|
||||
const { can: canUpdateSubscription } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateSubscription } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_WRITE,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { FormPanel } from 'components/ui/Forms/FormPanel'
|
||||
import { useBackupsQuery } from 'data/database/backups-query'
|
||||
import { useReadReplicasQuery } from 'data/read-replicas/replicas-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import type { Timezone } from './PITR.types'
|
||||
import { TimezoneSelection } from './TimezoneSelection'
|
||||
|
||||
@@ -41,7 +41,7 @@ const PITRStatus = ({
|
||||
.tz(selectedTimezone?.utc[0])
|
||||
.format('DD MMM YYYY, HH:mm:ss')
|
||||
|
||||
const { can: canTriggerPhysicalBackup } = useAsyncCheckProjectPermissions(
|
||||
const { can: canTriggerPhysicalBackup } = useAsyncCheckPermissions(
|
||||
PermissionAction.INFRA_EXECUTE,
|
||||
'queue_job.walg.prepare_restore'
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import { toast } from 'sonner'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useDatabaseExtensionDisableMutation } from 'data/database-extensions/database-extension-disable-mutation'
|
||||
import { DatabaseExtension } from 'data/database-extensions/database-extensions-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsOrioleDb, useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { extensions } from 'shared-data'
|
||||
import { Button, Switch, TableCell, TableRow, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
|
||||
@@ -28,7 +28,7 @@ export const ExtensionRow = ({ extension }: ExtensionRowProps) => {
|
||||
const [isDisableModalOpen, setIsDisableModalOpen] = useState(false)
|
||||
const [showConfirmEnableModal, setShowConfirmEnableModal] = useState(false)
|
||||
|
||||
const { can: canUpdateExtensions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateExtensions } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'extensions'
|
||||
)
|
||||
|
||||
@@ -9,7 +9,7 @@ import InformationBox from 'components/ui/InformationBox'
|
||||
import NoSearchResults from 'components/ui/NoSearchResults'
|
||||
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
|
||||
import { useDatabaseExtensionsQuery } from 'data/database-extensions/database-extensions-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
Card,
|
||||
@@ -51,8 +51,10 @@ export const Extensions = () => {
|
||||
(ext) => !isNull(ext.installed_version)
|
||||
)
|
||||
|
||||
const { can: canUpdateExtensions, isSuccess: isPermissionsLoaded } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions')
|
||||
const { can: canUpdateExtensions, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'extensions'
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
if (filter !== undefined) setFilterString(filter as string)
|
||||
|
||||
@@ -5,7 +5,7 @@ import { useRouter } from 'next/router'
|
||||
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useDatabaseFunctionsQuery } from 'data/database-functions/database-functions-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state'
|
||||
import {
|
||||
@@ -15,8 +15,8 @@ import {
|
||||
DropdownMenuItem,
|
||||
DropdownMenuSeparator,
|
||||
DropdownMenuTrigger,
|
||||
TableRow,
|
||||
TableCell,
|
||||
TableRow,
|
||||
} from 'ui'
|
||||
|
||||
interface FunctionListProps {
|
||||
@@ -51,7 +51,7 @@ const FunctionList = ({
|
||||
(func) => func.name.toLocaleLowerCase()
|
||||
)
|
||||
const projectRef = selectedProject?.ref
|
||||
const { can: canUpdateFunctions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateFunctions } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'functions'
|
||||
)
|
||||
|
||||
@@ -12,21 +12,20 @@ import SchemaSelector from 'components/ui/SchemaSelector'
|
||||
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
|
||||
import { useDatabaseFunctionsQuery } from 'data/database-functions/database-functions-query'
|
||||
import { useSchemasQuery } from 'data/database/schemas-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useQuerySchemaState } from 'hooks/misc/useSchemaQueryState'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { useIsProtectedSchema } from 'hooks/useProtectedSchemas'
|
||||
import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state'
|
||||
import {
|
||||
AiIconAnimation,
|
||||
Card,
|
||||
Input,
|
||||
Table,
|
||||
TableHeader,
|
||||
TableHead,
|
||||
TableBody,
|
||||
TableHead,
|
||||
TableHeader,
|
||||
TableRow,
|
||||
TableCell,
|
||||
Card,
|
||||
} from 'ui'
|
||||
import { ProtectedSchemaWarning } from '../../ProtectedSchemaWarning'
|
||||
import FunctionList from './FunctionList'
|
||||
@@ -60,7 +59,7 @@ const FunctionsList = ({
|
||||
router.push(url)
|
||||
}
|
||||
|
||||
const { can: canCreateFunctions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateFunctions } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'functions'
|
||||
)
|
||||
|
||||
@@ -8,7 +8,7 @@ import { useParams } from 'common'
|
||||
import Table from 'components/to-be-cleaned/Table'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useDatabaseHooksQuery } from 'data/database-triggers/database-triggers-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { BASE_PATH } from 'lib/constants'
|
||||
import {
|
||||
@@ -50,7 +50,7 @@ export const HookList = ({
|
||||
x.schema === schema &&
|
||||
x.function_args.length >= 2
|
||||
)
|
||||
const { can: canUpdateWebhook } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateWebhook } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'triggers'
|
||||
)
|
||||
|
||||
@@ -10,7 +10,7 @@ import { DocsButton } from 'components/ui/DocsButton'
|
||||
import NoSearchResults from 'components/ui/NoSearchResults'
|
||||
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
|
||||
import { useDatabaseHooksQuery } from 'data/database-triggers/database-triggers-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { noop } from 'lib/void'
|
||||
import { Input } from 'ui'
|
||||
@@ -46,8 +46,10 @@ export const HooksList = ({
|
||||
)
|
||||
const filteredHookSchemas = lodashMap(uniqBy(filteredHooks, 'schema'), 'schema')
|
||||
|
||||
const { can: canCreateWebhooks, isSuccess: isPermissionsLoaded } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'triggers')
|
||||
const { can: canCreateWebhooks, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'triggers'
|
||||
)
|
||||
|
||||
return (
|
||||
<div className="w-full space-y-4">
|
||||
|
||||
@@ -10,7 +10,7 @@ import InformationBox from 'components/ui/InformationBox'
|
||||
import NoSearchResults from 'components/ui/NoSearchResults'
|
||||
import { useDatabasePublicationsQuery } from 'data/database-publications/database-publications-query'
|
||||
import { useDatabasePublicationUpdateMutation } from 'data/database-publications/database-publications-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
Button,
|
||||
@@ -57,8 +57,10 @@ export const PublicationsList = () => {
|
||||
},
|
||||
})
|
||||
|
||||
const { can: canUpdatePublications, isSuccess: isPermissionsLoaded } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'publications')
|
||||
const { can: canUpdatePublications, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'publications'
|
||||
)
|
||||
|
||||
const publicationEvents: PublicationEvent[] = [
|
||||
{ event: 'Insert', key: 'publish_insert' },
|
||||
|
||||
@@ -4,7 +4,7 @@ import { useState } from 'react'
|
||||
import { toast } from 'sonner'
|
||||
|
||||
import { useDatabasePublicationUpdateMutation } from 'data/database-publications/database-publications-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { useProtectedSchemas } from 'hooks/useProtectedSchemas'
|
||||
import { Badge, Switch, TableCell, TableRow, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
|
||||
@@ -28,7 +28,7 @@ export const PublicationsTableItem = ({
|
||||
selectedPublication.tables?.find((x: any) => x.id == table.id) != undefined
|
||||
)
|
||||
|
||||
const { can: canUpdatePublications } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdatePublications } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'publications'
|
||||
)
|
||||
|
||||
@@ -10,7 +10,7 @@ import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { Loading } from 'components/ui/Loading'
|
||||
import { useDatabasePublicationsQuery } from 'data/database-publications/database-publications-query'
|
||||
import { useTablesQuery } from 'data/tables/tables-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { Card, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from 'ui'
|
||||
import { Admonition } from 'ui-patterns'
|
||||
@@ -22,8 +22,10 @@ export const PublicationsTables = () => {
|
||||
const { data: project } = useSelectedProjectQuery()
|
||||
const [filterString, setFilterString] = useState<string>('')
|
||||
|
||||
const { can: canUpdatePublications, isLoading: isLoadingPermissions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'publications')
|
||||
const { can: canUpdatePublications, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'publications'
|
||||
)
|
||||
|
||||
const { data: publications = [] } = useDatabasePublicationsQuery({
|
||||
projectRef: project?.ref,
|
||||
|
||||
@@ -8,7 +8,7 @@ import NoSearchResults from 'components/ui/NoSearchResults'
|
||||
import SparkBar from 'components/ui/SparkBar'
|
||||
import { useDatabaseRolesQuery } from 'data/database-roles/database-roles-query'
|
||||
import { useMaxConnectionsQuery } from 'data/database/max-connections-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { Badge, Button, Input, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
|
||||
import { CreateRolePanel } from './CreateRolePanel'
|
||||
@@ -27,7 +27,7 @@ const RolesList = () => {
|
||||
const [isCreatingRole, setIsCreatingRole] = useState(false)
|
||||
const [selectedRoleToDelete, setSelectedRoleToDelete] = useState<any>()
|
||||
|
||||
const { can: canUpdateRoles } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateRoles } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'roles'
|
||||
)
|
||||
|
||||
@@ -13,7 +13,7 @@ import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
|
||||
import { useTableEditorQuery } from 'data/table-editor/table-editor-query'
|
||||
import { isTableLike } from 'data/table-editor/table-editor-types'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { useIsProtectedSchema } from 'hooks/useProtectedSchemas'
|
||||
import {
|
||||
@@ -65,7 +65,7 @@ export const ColumnList = ({
|
||||
: selectedTable?.columns?.filter((column) => column.name.includes(filterString))) ?? []
|
||||
|
||||
const { isSchemaLocked } = useIsProtectedSchema({ schema: selectedTable?.schema ?? '' })
|
||||
const { can: canUpdateColumns } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateColumns } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'columns'
|
||||
)
|
||||
|
||||
@@ -32,7 +32,7 @@ import { useMaterializedViewsQuery } from 'data/materialized-views/materialized-
|
||||
import { usePrefetchEditorTablePage } from 'data/prefetchers/project.$ref.editor.$id'
|
||||
import { useTablesQuery } from 'data/tables/tables-query'
|
||||
import { useViewsQuery } from 'data/views/views-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useQuerySchemaState } from 'hooks/misc/useSchemaQueryState'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { useIsProtectedSchema } from 'hooks/useProtectedSchemas'
|
||||
@@ -50,15 +50,15 @@ import {
|
||||
PopoverContent_Shadcn_,
|
||||
PopoverTrigger_Shadcn_,
|
||||
Popover_Shadcn_,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableHead,
|
||||
TableHeader,
|
||||
TableRow,
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipTrigger,
|
||||
Table,
|
||||
TableHeader,
|
||||
TableHead,
|
||||
TableBody,
|
||||
TableRow,
|
||||
TableCell,
|
||||
cn,
|
||||
} from 'ui'
|
||||
import { ProtectedSchemaWarning } from '../ProtectedSchemaWarning'
|
||||
@@ -88,7 +88,7 @@ export const TableList = ({
|
||||
const [filterString, setFilterString] = useState<string>('')
|
||||
const [visibleTypes, setVisibleTypes] = useState<string[]>(Object.values(ENTITY_TYPE))
|
||||
|
||||
const { can: canUpdateTables } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateTables } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'tables'
|
||||
)
|
||||
|
||||
@@ -2,10 +2,9 @@ import { PermissionAction } from '@supabase/shared-types/out/constants'
|
||||
import { includes, sortBy } from 'lodash'
|
||||
import { Check, Edit, Edit2, MoreVertical, Trash, X } from 'lucide-react'
|
||||
|
||||
import Table from 'components/to-be-cleaned/Table'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useDatabaseTriggersQuery } from 'data/database-triggers/database-triggers-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state'
|
||||
import {
|
||||
@@ -15,11 +14,11 @@ import {
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuTrigger,
|
||||
TableCell,
|
||||
TableRow,
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipTrigger,
|
||||
TableRow,
|
||||
TableCell,
|
||||
} from 'ui'
|
||||
import { generateTriggerCreateSQL } from './TriggerList.utils'
|
||||
|
||||
@@ -53,7 +52,7 @@ const TriggerList = ({
|
||||
filteredTriggers.filter((x) => x.schema == schema),
|
||||
(trigger) => trigger.name.toLocaleLowerCase()
|
||||
)
|
||||
const { can: canUpdateTriggers } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateTriggers } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'triggers'
|
||||
)
|
||||
|
||||
@@ -12,21 +12,20 @@ import SchemaSelector from 'components/ui/SchemaSelector'
|
||||
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
|
||||
import { useDatabaseTriggersQuery } from 'data/database-triggers/database-triggers-query'
|
||||
import { useTablesQuery } from 'data/tables/tables-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useQuerySchemaState } from 'hooks/misc/useSchemaQueryState'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { useIsProtectedSchema, useProtectedSchemas } from 'hooks/useProtectedSchemas'
|
||||
import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state'
|
||||
import {
|
||||
AiIconAnimation,
|
||||
Input,
|
||||
Card,
|
||||
Input,
|
||||
Table,
|
||||
TableHeader,
|
||||
TableHead,
|
||||
TableBody,
|
||||
TableHead,
|
||||
TableHeader,
|
||||
TableRow,
|
||||
TableCell,
|
||||
} from 'ui'
|
||||
import { ProtectedSchemaWarning } from '../../ProtectedSchemaWarning'
|
||||
import TriggerList from './TriggerList'
|
||||
@@ -67,7 +66,7 @@ const TriggersList = ({
|
||||
connectionString: project?.connectionString,
|
||||
})
|
||||
|
||||
const { can: canCreateTriggers } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateTriggers } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'triggers'
|
||||
)
|
||||
|
||||
@@ -25,7 +25,7 @@ import { useProjectAddonUpdateMutation } from 'data/subscriptions/project-addon-
|
||||
import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query'
|
||||
import { AddonVariantId } from 'data/subscriptions/types'
|
||||
import { useResourceWarningsQuery } from 'data/usage/resource-warnings-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import {
|
||||
useIsAwsCloudProvider,
|
||||
@@ -80,7 +80,7 @@ export function DiskManagementForm() {
|
||||
const isAwsK8s = useIsAwsK8sCloudProvider()
|
||||
|
||||
const { can: canUpdateDiskConfiguration, isSuccess: isPermissionsLoaded } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.UPDATE, 'projects', {
|
||||
useAsyncCheckPermissions(PermissionAction.UPDATE, 'projects', {
|
||||
resource: {
|
||||
project_id: project?.id,
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ import { UseFormReturn } from 'react-hook-form'
|
||||
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { formatCurrency } from 'lib/helpers'
|
||||
@@ -153,7 +153,7 @@ export const DiskManagementReviewAndSubmitDialog = ({
|
||||
|
||||
const { formState, getValues } = form
|
||||
|
||||
const { can: canUpdateDiskConfiguration } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateDiskConfiguration } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'projects',
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@ import { toast } from 'sonner'
|
||||
|
||||
import AutoTextArea from 'components/to-be-cleaned/forms/AutoTextArea'
|
||||
import { executeSql } from 'data/sql/execute-sql-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { timeout } from 'lib/helpers'
|
||||
import { Loader } from 'lucide-react'
|
||||
@@ -42,7 +42,7 @@ const Description = ({ content, metadata, onChange = noop }: DescrptionProps) =>
|
||||
const hasChanged = value != contentText
|
||||
const animateCss = `transition duration-150`
|
||||
|
||||
const { can: canUpdateDescription } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateDescription } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_QUERY,
|
||||
'*'
|
||||
)
|
||||
|
||||
@@ -18,7 +18,7 @@ import { useCustomDomainsQuery } from 'data/custom-domains/custom-domains-query'
|
||||
import { useEdgeFunctionQuery } from 'data/edge-functions/edge-function-query'
|
||||
import { useEdgeFunctionDeleteMutation } from 'data/edge-functions/edge-functions-delete-mutation'
|
||||
import { useEdgeFunctionUpdateMutation } from 'data/edge-functions/edge-functions-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
Alert_Shadcn_,
|
||||
AlertDescription_Shadcn_,
|
||||
@@ -59,7 +59,7 @@ export const EdgeFunctionDetails = () => {
|
||||
const router = useRouter()
|
||||
const { ref: projectRef, functionSlug } = useParams()
|
||||
const [showDeleteModal, setShowDeleteModal] = useState(false)
|
||||
const { can: canUpdateEdgeFunction } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateEdgeFunction } = useAsyncCheckPermissions(
|
||||
PermissionAction.FUNCTIONS_WRITE,
|
||||
'*'
|
||||
)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Trash } from 'lucide-react'
|
||||
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import type { ProjectSecret } from 'data/secrets/secrets-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { TableCell, TableRow } from 'ui'
|
||||
import { TimestampInfo } from 'ui-patterns'
|
||||
|
||||
@@ -13,10 +13,7 @@ interface EdgeFunctionSecretProps {
|
||||
}
|
||||
|
||||
const EdgeFunctionSecret = ({ secret, onSelectDelete }: EdgeFunctionSecretProps) => {
|
||||
const { can: canUpdateSecrets } = useAsyncCheckProjectPermissions(
|
||||
PermissionAction.SECRETS_WRITE,
|
||||
'*'
|
||||
)
|
||||
const { can: canUpdateSecrets } = useAsyncCheckPermissions(PermissionAction.SECRETS_WRITE, '*')
|
||||
// [Joshen] Following API's validation:
|
||||
// https://github.com/supabase/infrastructure/blob/develop/api/src/routes/v1/projects/ref/secrets/secrets.controller.ts#L106
|
||||
const isReservedSecret = !!secret.name.match(/^(SUPABASE_).*/)
|
||||
|
||||
@@ -9,7 +9,7 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
|
||||
import { useSecretsDeleteMutation } from 'data/secrets/secrets-delete-mutation'
|
||||
import { ProjectSecret, useSecretsQuery } from 'data/secrets/secrets-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Badge, Card, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from 'ui'
|
||||
import { Input } from 'ui-patterns/DataInputs/Input'
|
||||
import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
|
||||
@@ -21,14 +21,11 @@ const EdgeFunctionSecrets = () => {
|
||||
const [searchString, setSearchString] = useState('')
|
||||
const [selectedSecret, setSelectedSecret] = useState<ProjectSecret>()
|
||||
|
||||
const { can: canReadSecrets, isLoading: isLoadingPermissions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadSecrets, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.SECRETS_READ,
|
||||
'*'
|
||||
)
|
||||
const { can: canUpdateSecrets } = useAsyncCheckProjectPermissions(
|
||||
PermissionAction.SECRETS_WRITE,
|
||||
'*'
|
||||
)
|
||||
const { can: canUpdateSecrets } = useAsyncCheckPermissions(PermissionAction.SECRETS_WRITE, '*')
|
||||
|
||||
const { data, error, isLoading, isSuccess, isError } = useSecretsQuery({
|
||||
projectRef: projectRef,
|
||||
|
||||
@@ -36,7 +36,7 @@ import { AlertTriangle, XIcon } from 'lucide-react'
|
||||
import { MouseEventHandler, useCallback, useEffect, useState } from 'react'
|
||||
|
||||
import { LOCAL_STORAGE_KEYS } from 'common'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useLocalStorage } from 'hooks/misc/useLocalStorage'
|
||||
import { AlertDescription_Shadcn_, AlertTitle_Shadcn_, Alert_Shadcn_, Button, cn } from 'ui'
|
||||
import { RoleImpersonationSelector } from '../RoleImpersonationSelector'
|
||||
@@ -76,7 +76,7 @@ const GraphiQLInterface = ({ theme }: GraphiQLInterfaceProps) => {
|
||||
const merge = useMergeQuery()
|
||||
const prettify = usePrettifyEditors()
|
||||
|
||||
const { can: canReadJWTSecret } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadJWTSecret } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'field.jwt_secret'
|
||||
)
|
||||
|
||||
@@ -9,7 +9,7 @@ import Panel from 'components/ui/Panel'
|
||||
import { getKeys, useAPIKeysQuery } from 'data/api-keys/api-keys-query'
|
||||
import { useJwtSecretUpdatingStatusQuery } from 'data/config/jwt-secret-updating-status-query'
|
||||
import { useProjectSettingsV2Query } from 'data/config/project-settings-v2-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import { Input, SimpleCodeBlock } from 'ui'
|
||||
|
||||
@@ -77,7 +77,7 @@ export const APIKeys = () => {
|
||||
|
||||
const jwtSecretUpdateStatus = data?.jwtSecretUpdateStatus
|
||||
|
||||
const { can: canReadAPIKeys } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadAPIKeys } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'service_api_keys'
|
||||
)
|
||||
|
||||
@@ -12,6 +12,7 @@ import dayjs from 'dayjs'
|
||||
import { Plus } from 'lucide-react'
|
||||
import type { CSSProperties, ReactNode } from 'react'
|
||||
import { useCallback, useEffect, useMemo, useState } from 'react'
|
||||
import { toast } from 'sonner'
|
||||
|
||||
import { useParams } from 'common'
|
||||
import { SnippetDropdown } from 'components/interfaces/HomeNew/SnippetDropdown'
|
||||
@@ -22,13 +23,12 @@ import { AnalyticsInterval } from 'data/analytics/constants'
|
||||
import { useContentInfiniteQuery } from 'data/content/content-infinite-query'
|
||||
import { Content } from 'data/content/content-query'
|
||||
import { useContentUpsertMutation } from 'data/content/content-upsert-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { uuidv4 } from 'lib/helpers'
|
||||
import { useProfile } from 'lib/profile'
|
||||
import type { Dashboards } from 'types'
|
||||
import { Button } from 'ui'
|
||||
import { Row } from 'ui-patterns'
|
||||
import { toast } from 'sonner'
|
||||
|
||||
export function CustomReportSection() {
|
||||
const startDate = dayjs().subtract(7, 'day').toISOString()
|
||||
@@ -50,7 +50,7 @@ export function CustomReportSection() {
|
||||
if (reportContent) setEditableReport(reportContent)
|
||||
}, [reportContent])
|
||||
|
||||
const { can: canUpdateReport } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateReport } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'user_content',
|
||||
{
|
||||
@@ -63,7 +63,7 @@ export function CustomReportSection() {
|
||||
}
|
||||
)
|
||||
|
||||
const { can: canCreateReport } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateReport } = useAsyncCheckPermissions(
|
||||
PermissionAction.CREATE,
|
||||
'user_content',
|
||||
{ resource: { type: 'report', owner_id: profile?.id }, subject: { id: profile?.id } }
|
||||
|
||||
@@ -17,7 +17,7 @@ import { useDatabaseCronJobCreateMutation } from 'data/database-cron-jobs/databa
|
||||
import { CronJob } from 'data/database-cron-jobs/database-cron-jobs-infinite-query'
|
||||
import { useDatabaseExtensionsQuery } from 'data/database-extensions/database-extensions-query'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
@@ -223,7 +223,7 @@ export const CreateCronJobSheet = ({
|
||||
const { mutate: upsertCronJob, isLoading: isUpserting } = useDatabaseCronJobCreateMutation()
|
||||
const isLoading = isLoadingGetCronJob || isUpserting
|
||||
|
||||
const { can: canToggleExtensions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canToggleExtensions } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'extensions'
|
||||
)
|
||||
|
||||
@@ -21,7 +21,7 @@ import {
|
||||
} from 'data/database-queues/database-queues-toggle-postgrest-mutation'
|
||||
import { useTableUpdateMutation } from 'data/tables/table-update-mutation'
|
||||
import { useTablesQuery } from 'data/tables/tables-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
Button,
|
||||
@@ -39,7 +39,7 @@ import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
|
||||
|
||||
export const QueuesSettings = () => {
|
||||
const { data: project } = useSelectedProjectQuery()
|
||||
const { can: canUpdatePostgrestConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdatePostgrestConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_postgrest'
|
||||
)
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
|
||||
import { DropdownMenuItemTooltip } from 'components/ui/DropdownMenuItemTooltip'
|
||||
import { useVaultSecretDecryptedValueQuery } from 'data/vault/vault-secret-decrypted-value-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { Edit3, Eye, EyeOff, Key, Loader, MoreVertical, Trash } from 'lucide-react'
|
||||
import type { VaultSecret } from 'types'
|
||||
@@ -33,7 +33,7 @@ const SecretRow = ({ row, col, onSelectRemove }: SecretRowProps) => {
|
||||
const [revealSecret, setRevealSecret] = useState(false)
|
||||
const name = row?.name ?? 'No name provided'
|
||||
|
||||
const { can: canManageSecrets } = useAsyncCheckProjectPermissions(
|
||||
const { can: canManageSecrets } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'tables'
|
||||
)
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
import { PermissionAction } from '@supabase/shared-types/out/constants'
|
||||
import DataGrid, { Row } from 'react-data-grid'
|
||||
import { sortBy } from 'lodash'
|
||||
import { Loader, RefreshCw, Search, X } from 'lucide-react'
|
||||
import { RefreshCw, Search, X } from 'lucide-react'
|
||||
import { useEffect, useMemo, useState } from 'react'
|
||||
import DataGrid, { Row } from 'react-data-grid'
|
||||
|
||||
import { useParams } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { DocsButton } from 'components/ui/DocsButton'
|
||||
import { useVaultSecretsQuery } from 'data/vault/vault-secrets-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import type { VaultSecret } from 'types'
|
||||
import {
|
||||
Button,
|
||||
cn,
|
||||
Input,
|
||||
LoadingLine,
|
||||
cn,
|
||||
Select_Shadcn_,
|
||||
SelectTrigger_Shadcn_,
|
||||
SelectValue_Shadcn_,
|
||||
SelectContent_Shadcn_,
|
||||
SelectItem_Shadcn_,
|
||||
SelectTrigger_Shadcn_,
|
||||
SelectValue_Shadcn_,
|
||||
} from 'ui'
|
||||
import AddNewSecretModal from './AddNewSecretModal'
|
||||
import DeleteSecretModal from './DeleteSecretModal'
|
||||
@@ -35,7 +35,7 @@ export const SecretsManagement = () => {
|
||||
const [selectedSecretToRemove, setSelectedSecretToRemove] = useState<VaultSecret>()
|
||||
const [selectedSort, setSelectedSort] = useState<'updated_at' | 'name'>('updated_at')
|
||||
|
||||
const { can: canManageSecrets } = useAsyncCheckProjectPermissions(
|
||||
const { can: canManageSecrets } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'tables'
|
||||
)
|
||||
|
||||
@@ -6,14 +6,14 @@ import DeleteHookModal from 'components/interfaces/Database/Hooks/DeleteHookModa
|
||||
import { EditHookPanel } from 'components/interfaces/Database/Hooks/EditHookPanel'
|
||||
import { HooksList } from 'components/interfaces/Database/Hooks/HooksList/HooksList'
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
|
||||
export const WebhooksListTab = () => {
|
||||
const [selectedHook, setSelectedHook] = useState<any>()
|
||||
const [showCreateHookForm, setShowCreateHookForm] = useState<boolean>(false)
|
||||
const [showDeleteHookForm, setShowDeleteHookForm] = useState<boolean>(false)
|
||||
|
||||
const { can: canReadWebhooks, isSuccess: isPermissionsLoaded } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadWebhooks, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_READ,
|
||||
'triggers'
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
|
||||
import { useHooksEnableMutation } from 'data/database/hooks-enable-mutation'
|
||||
import { useSchemasQuery } from 'data/database/schemas-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { Admonition } from 'ui-patterns'
|
||||
import { IntegrationOverviewTab } from '../Integration/IntegrationOverviewTab'
|
||||
@@ -26,7 +26,7 @@ export const WebhooksOverviewTab = () => {
|
||||
})
|
||||
|
||||
const isHooksEnabled = schemas?.some((schema) => schema.name === 'supabase_functions')
|
||||
const { can: canReadWebhooks, isLoading: isLoadingPermissions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadWebhooks, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_READ,
|
||||
'triggers'
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ import { useState } from 'react'
|
||||
import { useParams } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useDatabaseExtensionsQuery } from 'data/database-extensions/database-extensions-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
Alert_Shadcn_,
|
||||
@@ -28,7 +28,7 @@ export const WrapperOverviewTab = () => {
|
||||
const [createWrapperShown, setCreateWrapperShown] = useState(false)
|
||||
const [isClosingCreateWrapper, setisClosingCreateWrapper] = useState(false)
|
||||
|
||||
const { can: canCreateWrapper } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateWrapper } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'wrappers'
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import { useState } from 'react'
|
||||
import { useParams } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import type { FDW } from 'data/fdw/fdws-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
Badge,
|
||||
Sheet,
|
||||
@@ -29,7 +29,7 @@ interface WrapperRowProps {
|
||||
|
||||
const WrapperRow = ({ wrapper }: WrapperRowProps) => {
|
||||
const { ref, id } = useParams()
|
||||
const { can: canManageWrappers } = useAsyncCheckProjectPermissions(
|
||||
const { can: canManageWrappers } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'wrappers'
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import { HTMLProps, ReactNode, useCallback, useState } from 'react'
|
||||
import { useParams } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { FDW, useFDWsQuery } from 'data/fdw/fdws-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { Sheet, SheetContent } from 'ui'
|
||||
import { CreateWrapperSheet } from './CreateWrapperSheet'
|
||||
@@ -20,7 +20,7 @@ export const WrappersTab = () => {
|
||||
const [createWrapperShown, setCreateWrapperShown] = useState(false)
|
||||
const [isClosingCreateWrapper, setisClosingCreateWrapper] = useState(false)
|
||||
|
||||
const { can: canCreateWrapper } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateWrapper } = useAsyncCheckPermissions(
|
||||
PermissionAction.TENANT_SQL_ADMIN_WRITE,
|
||||
'wrappers'
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ import { useJwtSecretUpdateMutation } from 'data/config/jwt-secret-update-mutati
|
||||
import { useJwtSecretUpdatingStatusQuery } from 'data/config/jwt-secret-updating-status-query'
|
||||
import { useProjectPostgrestConfigQuery } from 'data/config/project-postgrest-config-query'
|
||||
import { useLegacyJWTSigningKeyQuery } from 'data/jwt-signing-keys/legacy-jwt-signing-key-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { uuidv4 } from 'lib/helpers'
|
||||
import {
|
||||
AlertCircle,
|
||||
@@ -73,15 +73,15 @@ const JWTSettings = () => {
|
||||
const [isCreatingKey, setIsCreatingKey] = useState<boolean>(false)
|
||||
const [isRegeneratingKey, setIsGeneratingKey] = useState<boolean>(false)
|
||||
|
||||
const { can: canReadJWTSecret } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadJWTSecret } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'field.jwt_secret'
|
||||
)
|
||||
const { can: canGenerateNewJWTSecret } = useAsyncCheckProjectPermissions(
|
||||
const { can: canGenerateNewJWTSecret } = useAsyncCheckPermissions(
|
||||
PermissionAction.INFRA_EXECUTE,
|
||||
'queue_job.projects.update_jwt'
|
||||
)
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'custom_config_gotrue'
|
||||
)
|
||||
|
||||
@@ -23,7 +23,7 @@ import {
|
||||
import { useOrganizationMembersQuery } from 'data/organizations/organization-members-query'
|
||||
import { useOrganizationsQuery } from 'data/organizations/organizations-query'
|
||||
import { useProjectsQuery } from 'data/projects/projects-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
AlertDescription_Shadcn_,
|
||||
AlertTitle_Shadcn_,
|
||||
@@ -54,8 +54,10 @@ export const AuditLogs = () => {
|
||||
projects: [], // project_ref[]
|
||||
})
|
||||
|
||||
const { can: canReadAuditLogs, isLoading: isLoadingPermissions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.READ, 'notifications')
|
||||
const { can: canReadAuditLogs, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'notifications'
|
||||
)
|
||||
|
||||
const { data: projectsData } = useProjectsQuery()
|
||||
const projects = projectsData?.projects ?? []
|
||||
|
||||
@@ -13,19 +13,21 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import ShimmeringLoader from 'components/ui/ShimmeringLoader'
|
||||
import SparkBar from 'components/ui/SparkBar'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import UpcomingInvoice from './UpcomingInvoice'
|
||||
import { MANAGED_BY } from 'lib/constants/infrastructure'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { MANAGED_BY } from 'lib/constants/infrastructure'
|
||||
import UpcomingInvoice from './UpcomingInvoice'
|
||||
|
||||
const BillingBreakdown = () => {
|
||||
const { slug: orgSlug } = useParams()
|
||||
|
||||
const { data: selectedOrganization } = useSelectedOrganizationQuery()
|
||||
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.subscriptions')
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
const {
|
||||
data: subscription,
|
||||
|
||||
@@ -16,7 +16,7 @@ import { useOrganizationCustomerProfileQuery } from 'data/organizations/organiza
|
||||
import { useOrganizationCustomerProfileUpdateMutation } from 'data/organizations/organization-customer-profile-update-mutation'
|
||||
import { useOrganizationTaxIdQuery } from 'data/organizations/organization-tax-id-query'
|
||||
import { useOrganizationTaxIdUpdateMutation } from 'data/organizations/organization-tax-id-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { Button, Card, CardFooter, Form_Shadcn_ as Form } from 'ui'
|
||||
import {
|
||||
@@ -31,8 +31,8 @@ export const BillingCustomerData = () => {
|
||||
const { data: selectedOrganization } = useSelectedOrganizationQuery()
|
||||
|
||||
const { can: canReadBillingCustomerData, isSuccess: isPermissionsLoaded } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.customer')
|
||||
const { can: canUpdateBillingCustomerData } = useAsyncCheckProjectPermissions(
|
||||
useAsyncCheckPermissions(PermissionAction.BILLING_READ, 'stripe.customer')
|
||||
const { can: canUpdateBillingCustomerData } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_WRITE,
|
||||
'stripe.customer'
|
||||
)
|
||||
|
||||
@@ -18,7 +18,7 @@ import { FormSection, FormSectionContent } from 'components/ui/Forms/FormSection
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { useOrganizationCustomerProfileQuery } from 'data/organizations/organization-customer-profile-query'
|
||||
import { useOrganizationUpdateMutation } from 'data/organizations/organization-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { FormMessage_Shadcn_, Input_Shadcn_ } from 'ui'
|
||||
import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
|
||||
@@ -42,9 +42,11 @@ const BillingEmail = () => {
|
||||
|
||||
const { name, billing_email } = selectedOrganization ?? {}
|
||||
|
||||
const { can: canReadBillingEmail, isSuccess: isPermissionsLoaded } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.subscriptions')
|
||||
const { can: canUpdateOrganization } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadBillingEmail, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
const { can: canUpdateOrganization } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'organizations'
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import { PARTNER_TO_NAME } from 'components/ui/PartnerManagedResource'
|
||||
import ShimmeringLoader from 'components/ui/ShimmeringLoader'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { BASE_PATH } from 'lib/constants'
|
||||
import { MANAGED_BY } from 'lib/constants/infrastructure'
|
||||
@@ -33,8 +33,10 @@ const CostControl = ({}: CostControlProps) => {
|
||||
const { resolvedTheme } = useTheme()
|
||||
const { data: selectedOrganization } = useSelectedOrganizationQuery()
|
||||
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.subscriptions')
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
const snap = useOrgSettingsPageStateSnapshot()
|
||||
const projectUpdateDisabled = useFlag('disableProjectCreationAndUpdate')
|
||||
|
||||
@@ -9,7 +9,7 @@ import { useParams } from 'common'
|
||||
import Table from 'components/to-be-cleaned/Table'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import { useOrgSubscriptionUpdateMutation } from 'data/subscriptions/org-subscription-update-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { BASE_PATH, PRICING_TIER_PRODUCT_IDS } from 'lib/constants'
|
||||
import { ChevronRight, ExternalLink } from 'lucide-react'
|
||||
import { pricing } from 'shared-data/pricing'
|
||||
@@ -43,7 +43,7 @@ const SpendCapSidePanel = () => {
|
||||
const [showUsageCosts, setShowUsageCosts] = useState(false)
|
||||
const [selectedOption, setSelectedOption] = useState<'on' | 'off'>()
|
||||
|
||||
const { can: canUpdateSpendCap } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateSpendCap } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_WRITE,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
@@ -11,14 +11,16 @@ import { FormPanel } from 'components/ui/Forms/FormPanel'
|
||||
import { FormSection, FormSectionContent } from 'components/ui/Forms/FormSection'
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { CreditTopUp } from './CreditTopUp'
|
||||
|
||||
const CreditBalance = () => {
|
||||
const { slug } = useParams()
|
||||
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.subscriptions')
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
const {
|
||||
data: subscription,
|
||||
|
||||
@@ -17,7 +17,7 @@ import { PaymentConfirmation } from 'components/interfaces/Billing/Payment/Payme
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useOrganizationCreditTopUpMutation } from 'data/organizations/organization-credit-top-up-mutation'
|
||||
import { subscriptionKeys } from 'data/subscriptions/keys'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { STRIPE_PUBLIC_KEY } from 'lib/constants'
|
||||
import {
|
||||
Alert_Shadcn_,
|
||||
@@ -63,7 +63,7 @@ export const CreditTopUp = ({ slug }: { slug: string | undefined }) => {
|
||||
createPaymentMethod: PaymentMethodElementRef['createPaymentMethod']
|
||||
}>(null)
|
||||
|
||||
const { can: canTopUpCredits, isSuccess: isPermissionsLoaded } = useAsyncCheckProjectPermissions(
|
||||
const { can: canTopUpCredits, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_WRITE,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
@@ -18,7 +18,7 @@ import { useOrgPlansQuery } from 'data/subscriptions/org-plans-query'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import type { OrgPlan } from 'data/subscriptions/types'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { MANAGED_BY } from 'lib/constants/infrastructure'
|
||||
import { formatCurrency } from 'lib/helpers'
|
||||
@@ -60,7 +60,7 @@ const PlanUpdateSidePanel = () => {
|
||||
const [showDowngradeError, setShowDowngradeError] = useState(false)
|
||||
const [selectedTier, setSelectedTier] = useState<'tier_free' | 'tier_pro' | 'tier_team'>()
|
||||
|
||||
const { can: canUpdateSubscription } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateSubscription } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_WRITE,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
@@ -11,7 +11,7 @@ import AlertError from 'components/ui/AlertError'
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import ShimmeringLoader from 'components/ui/ShimmeringLoader'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useOrgSettingsPageStateSnapshot } from 'state/organization-settings'
|
||||
import { Alert, Button } from 'ui'
|
||||
import { Admonition } from 'ui-patterns'
|
||||
@@ -24,8 +24,10 @@ const Subscription = () => {
|
||||
const snap = useOrgSettingsPageStateSnapshot()
|
||||
const projectUpdateDisabled = useFlag('disableProjectCreationAndUpdate')
|
||||
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.subscriptions')
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
const {
|
||||
data: subscription,
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { getDocument } from 'data/documents/document-query'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { Button } from 'ui'
|
||||
import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
|
||||
@@ -23,8 +23,10 @@ export const SOC2 = () => {
|
||||
const slug = organization?.slug
|
||||
|
||||
const { mutate: sendEvent } = useSendEventMutation()
|
||||
const { can: canReadSubscriptions, isLoading: isLoadingPermissions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.subscriptions')
|
||||
const { can: canReadSubscriptions, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
const currentPlan = organization?.plan
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { getDocument } from 'data/documents/document-query'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { Button } from 'ui'
|
||||
import ShimmeringLoader from 'ui-patterns/ShimmeringLoader'
|
||||
@@ -21,8 +21,10 @@ export const SecurityQuestionnaire = () => {
|
||||
const slug = organization?.slug
|
||||
|
||||
const { mutate: sendEvent } = useSendEventMutation()
|
||||
const { can: canReadSubscriptions, isLoading: isLoadingPermissions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.subscriptions')
|
||||
const { can: canReadSubscriptions, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
const currentPlan = organization?.plan
|
||||
|
||||
|
||||
@@ -3,13 +3,13 @@ import { useEffect } from 'react'
|
||||
|
||||
import { FormActions } from 'components/ui/Forms/FormActions'
|
||||
import { useAIOptInForm } from 'hooks/forms/useAIOptInForm'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Card, CardContent, CardFooter, Form_Shadcn_ } from 'ui'
|
||||
import { AIOptInLevelSelector } from './AIOptInLevelSelector'
|
||||
|
||||
export const DataPrivacyForm = () => {
|
||||
const { form, onSubmit, isUpdating, currentOptInLevel } = useAIOptInForm()
|
||||
const { can: canUpdateOrganization } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateOrganization } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'organizations'
|
||||
)
|
||||
|
||||
@@ -6,7 +6,7 @@ import { toast } from 'sonner'
|
||||
import { LOCAL_STORAGE_KEYS } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { useOrganizationDeleteMutation } from 'data/organizations/organization-delete-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { Button, Form, Input, Modal } from 'ui'
|
||||
@@ -24,7 +24,7 @@ export const DeleteOrganizationButton = () => {
|
||||
''
|
||||
)
|
||||
|
||||
const { can: canDeleteOrganization } = useAsyncCheckProjectPermissions(
|
||||
const { can: canDeleteOrganization } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'organizations'
|
||||
)
|
||||
|
||||
@@ -11,7 +11,7 @@ import CopyButton from 'components/ui/CopyButton'
|
||||
import { FormActions } from 'components/ui/Forms/FormActions'
|
||||
import { useOrganizationUpdateMutation } from 'data/organizations/organization-update-mutation'
|
||||
import { invalidateOrganizationsQuery } from 'data/organizations/organizations-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import type { ResponseError } from 'types'
|
||||
import {
|
||||
@@ -35,7 +35,7 @@ export const OrganizationDetailsForm = () => {
|
||||
const queryClient = useQueryClient()
|
||||
const { data: selectedOrganization } = useSelectedOrganizationQuery()
|
||||
|
||||
const { can: canUpdateOrganization } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateOrganization } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'organizations'
|
||||
)
|
||||
|
||||
@@ -19,7 +19,7 @@ import { useGitHubAuthorizationQuery } from 'data/integrations/github-authorizat
|
||||
import { useGitHubConnectionDeleteMutation } from 'data/integrations/github-connection-delete-mutation'
|
||||
import { useGitHubConnectionsQuery } from 'data/integrations/github-connections-query'
|
||||
import type { IntegrationProjectConnection } from 'data/integrations/integrations.types'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { BASE_PATH } from 'lib/constants'
|
||||
@@ -50,12 +50,12 @@ const IntegrationSettings = () => {
|
||||
const showVercelIntegration = useIsFeatureEnabled('integrations:vercel')
|
||||
|
||||
const { can: canReadGithubConnection, isLoading: isLoadingPermissions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.READ, 'integrations.github_connections')
|
||||
const { can: canCreateGitHubConnection } = useAsyncCheckProjectPermissions(
|
||||
useAsyncCheckPermissions(PermissionAction.READ, 'integrations.github_connections')
|
||||
const { can: canCreateGitHubConnection } = useAsyncCheckPermissions(
|
||||
PermissionAction.CREATE,
|
||||
'integrations.github_connections'
|
||||
)
|
||||
const { can: canUpdateGitHubConnection } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateGitHubConnection } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'integrations.github_connections'
|
||||
)
|
||||
|
||||
@@ -5,11 +5,11 @@ import {
|
||||
ScaffoldSectionDetail,
|
||||
} from 'components/layouts/Scaffold'
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import InvoicesSettings from './InvoicesSettings'
|
||||
|
||||
const InvoicesSection = () => {
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadInvoices } = useAsyncCheckProjectPermissions(
|
||||
const { isSuccess: isPermissionsLoaded, can: canReadInvoices } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import { Edit, MoreVertical, Trash } from 'lucide-react'
|
||||
import Table from 'components/to-be-cleaned/Table'
|
||||
import CopyButton from 'components/ui/CopyButton'
|
||||
import type { OAuthApp } from 'data/oauth/oauth-apps-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import {
|
||||
Button,
|
||||
DropdownMenu,
|
||||
@@ -25,11 +25,11 @@ export interface OAuthAppRowProps {
|
||||
}
|
||||
|
||||
export const OAuthAppRow = ({ app, onSelectEdit, onSelectDelete }: OAuthAppRowProps) => {
|
||||
const { can: canUpdateOAuthApps } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateOAuthApps } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'approved_oauth_apps'
|
||||
)
|
||||
const { can: canDeleteOAuthApps } = useAsyncCheckProjectPermissions(
|
||||
const { can: canDeleteOAuthApps } = useAsyncCheckPermissions(
|
||||
PermissionAction.DELETE,
|
||||
'approved_oauth_apps'
|
||||
)
|
||||
|
||||
@@ -13,7 +13,7 @@ import ShimmeringLoader from 'components/ui/ShimmeringLoader'
|
||||
import { AuthorizedApp, useAuthorizedAppsQuery } from 'data/oauth/authorized-apps-query'
|
||||
import { OAuthAppCreateResponse } from 'data/oauth/oauth-app-create-mutation'
|
||||
import { OAuthApp, useOAuthAppsQuery } from 'data/oauth/oauth-apps-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Button, cn } from 'ui'
|
||||
import { AuthorizedAppRow } from './AuthorizedAppRow'
|
||||
import { DeleteAppModal } from './DeleteAppModal'
|
||||
@@ -34,9 +34,11 @@ export const OAuthApps = () => {
|
||||
const [selectedAppToDelete, setSelectedAppToDelete] = useState<OAuthApp>()
|
||||
const [selectedAppToRevoke, setSelectedAppToRevoke] = useState<AuthorizedApp>()
|
||||
|
||||
const { can: canReadOAuthApps, isLoading: isLoadingPermissions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.READ, 'approved_oauth_apps')
|
||||
const { can: canCreateOAuthApps } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadOAuthApps, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'approved_oauth_apps'
|
||||
)
|
||||
const { can: canCreateOAuthApps } = useAsyncCheckPermissions(
|
||||
PermissionAction.CREATE,
|
||||
'approved_oauth_apps'
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import { InlineLink } from 'components/ui/InlineLink'
|
||||
import { useClientSecretCreateMutation } from 'data/oauth-secrets/client-secret-create-mutation'
|
||||
import { CreatedSecret, useClientSecretsQuery } from 'data/oauth-secrets/client-secrets-query'
|
||||
import { OAuthApp } from 'data/oauth/oauth-apps-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { Alert_Shadcn_, AlertTitle_Shadcn_, InfoIcon } from 'ui'
|
||||
import { SecretRow } from './SecretRow'
|
||||
|
||||
@@ -18,10 +18,7 @@ interface Props {
|
||||
export const OAuthSecrets = ({ selectedApp }: Props) => {
|
||||
const { slug } = useParams()
|
||||
const [createdSecret, setCreatedSecret] = useState<CreatedSecret>()
|
||||
const { can: canManageSecrets } = useAsyncCheckProjectPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'oauth_apps'
|
||||
)
|
||||
const { can: canManageSecrets } = useAsyncCheckPermissions(PermissionAction.UPDATE, 'oauth_apps')
|
||||
|
||||
const { id: appId } = selectedApp ?? {}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import CopyButton from 'components/ui/CopyButton'
|
||||
import { useClientSecretDeleteMutation } from 'data/oauth-secrets/client-secret-delete-mutation'
|
||||
import { Secret, useClientSecretsQuery } from 'data/oauth-secrets/client-secrets-query'
|
||||
import { useOrganizationMembersQuery } from 'data/organizations/organization-members-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { cn } from 'ui'
|
||||
import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
|
||||
|
||||
@@ -22,10 +22,7 @@ export interface SecretRowProps {
|
||||
export const SecretRow = ({ secret, appId }: SecretRowProps) => {
|
||||
const { slug } = useParams()
|
||||
const [showDeleteModal, setShowDeleteModal] = useState(false)
|
||||
const { can: canManageSecrets } = useAsyncCheckProjectPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'oauth_apps'
|
||||
)
|
||||
const { can: canManageSecrets } = useAsyncCheckPermissions(PermissionAction.UPDATE, 'oauth_apps')
|
||||
|
||||
const { data } = useClientSecretsQuery({ slug, appId })
|
||||
const secrets = data?.client_secrets ?? []
|
||||
|
||||
@@ -16,7 +16,7 @@ import { useOrganizationMembersQuery } from 'data/organizations/organization-mem
|
||||
import { useOrganizationMfaToggleMutation } from 'data/organizations/organization-mfa-mutation'
|
||||
import { useOrganizationMfaQuery } from 'data/organizations/organization-mfa-query'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useProfile } from 'lib/profile'
|
||||
import {
|
||||
@@ -48,9 +48,11 @@ export const SecuritySettings = () => {
|
||||
const { data: selectedOrganization } = useSelectedOrganizationQuery()
|
||||
const { data: members } = useOrganizationMembersQuery({ slug })
|
||||
|
||||
const { can: canReadMfaConfig, isLoading: isLoadingPermissions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.READ, 'organizations')
|
||||
const { can: canUpdateMfaConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadMfaConfig, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'organizations'
|
||||
)
|
||||
const { can: canUpdateMfaConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'organizations'
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ import {
|
||||
} from 'data/organizations/organization-members-query'
|
||||
import { usePermissionsQuery } from 'data/permissions/permissions-query'
|
||||
import { useProjectsQuery } from 'data/projects/projects-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useProfile } from 'lib/profile'
|
||||
@@ -69,14 +69,14 @@ export const MemberActions = ({ member }: MemberActionsProps) => {
|
||||
const roleId = member.role_ids?.[0] ?? -1
|
||||
const canRemoveMember = member.role_ids.every((id) => rolesRemovable.includes(id))
|
||||
|
||||
const { can: canCreateUserInvites } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateUserInvites } = useAsyncCheckPermissions(
|
||||
PermissionAction.CREATE,
|
||||
'user_invites',
|
||||
{ resource: { role_id: roleId } }
|
||||
)
|
||||
const canResendInvite = canCreateUserInvites && hasOrgRole
|
||||
|
||||
const { can: canDeleteUserInvites } = useAsyncCheckProjectPermissions(
|
||||
const { can: canDeleteUserInvites } = useAsyncCheckPermissions(
|
||||
PermissionAction.DELETE,
|
||||
'user_invites',
|
||||
{ resource: { role_id: roleId } }
|
||||
|
||||
@@ -11,7 +11,7 @@ import NoPermission from 'components/ui/NoPermission'
|
||||
import ShimmeringLoader from 'components/ui/ShimmeringLoader'
|
||||
import { useProjectsQuery } from 'data/projects/projects-query'
|
||||
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { TIME_PERIODS_BILLING, TIME_PERIODS_REPORTS } from 'lib/constants/metrics'
|
||||
import {
|
||||
@@ -43,8 +43,10 @@ export const Usage = () => {
|
||||
const selectedProjectRef =
|
||||
selectedProjectRefInputValue === 'all-projects' ? undefined : selectedProjectRefInputValue
|
||||
|
||||
const { can: canReadSubscriptions, isLoading: isLoadingPermissions } =
|
||||
useAsyncCheckProjectPermissions(PermissionAction.BILLING_READ, 'stripe.subscriptions')
|
||||
const { can: canReadSubscriptions, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.BILLING_READ,
|
||||
'stripe.subscriptions'
|
||||
)
|
||||
|
||||
const { data: organization } = useSelectedOrganizationQuery()
|
||||
const { data, isSuccess } = useProjectsQuery()
|
||||
|
||||
@@ -6,7 +6,7 @@ import { useParams } from 'common'
|
||||
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
||||
import { getTemporaryAPIKey } from 'data/api-keys/temp-api-keys-query'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { ChooseChannelPopover } from './ChooseChannelPopover'
|
||||
import { RealtimeFilterPopover } from './RealtimeFilterPopover'
|
||||
@@ -23,7 +23,7 @@ export const Header = ({ config, onChangeConfig }: HeaderProps) => {
|
||||
const { ref } = useParams()
|
||||
const { data: org } = useSelectedOrganizationQuery()
|
||||
|
||||
const { can: canReadAPIKeys } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadAPIKeys } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'service_api_keys'
|
||||
)
|
||||
|
||||
@@ -10,7 +10,7 @@ import { DocsButton } from 'components/ui/DocsButton'
|
||||
import NoPermission from 'components/ui/NoPermission'
|
||||
import ShimmerLine from 'components/ui/ShimmerLine'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { Button, IconBroadcast, IconDatabaseChanges, IconPresence, cn } from 'ui'
|
||||
import { GenericSkeletonLoader } from 'ui-patterns'
|
||||
@@ -34,7 +34,7 @@ const NoResultAlert = ({
|
||||
}) => {
|
||||
const { ref } = useParams()
|
||||
|
||||
const { can: canReadAPIKeys, isLoading: isLoadingPermissions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadAPIKeys, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'service_api_keys'
|
||||
)
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
REALTIME_DEFAULT_CONFIG,
|
||||
useRealtimeConfigurationQuery,
|
||||
} from 'data/realtime/realtime-config-query'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import {
|
||||
@@ -41,7 +41,7 @@ export const RealtimeSettings = () => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const { data: project } = useSelectedProjectQuery()
|
||||
const { data: organization } = useSelectedOrganizationQuery()
|
||||
const { can: canUpdateConfig } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateConfig } = useAsyncCheckPermissions(
|
||||
PermissionAction.REALTIME_ADMIN_READ,
|
||||
'*'
|
||||
)
|
||||
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
useContentUpsertMutation,
|
||||
} from 'data/content/content-upsert-mutation'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { Metric, TIME_PERIODS_REPORTS } from 'lib/constants/metrics'
|
||||
@@ -82,7 +82,7 @@ const Reports = () => {
|
||||
const currentReport = userContents?.content.find((report) => report.id === id)
|
||||
const currentReportContent = currentReport?.content as Dashboards.Content
|
||||
|
||||
const { can: canReadReport, isLoading: isLoadingPermissions } = useAsyncCheckProjectPermissions(
|
||||
const { can: canReadReport, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
|
||||
PermissionAction.READ,
|
||||
'user_content',
|
||||
{
|
||||
@@ -94,7 +94,7 @@ const Reports = () => {
|
||||
subject: { id: profile?.id },
|
||||
}
|
||||
)
|
||||
const { can: canUpdateReport } = useAsyncCheckProjectPermissions(
|
||||
const { can: canUpdateReport } = useAsyncCheckPermissions(
|
||||
PermissionAction.UPDATE,
|
||||
'user_content',
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ import { useParams } from 'common'
|
||||
import { SQL_TEMPLATES } from 'components/interfaces/SQLEditor/SQLEditor.queries'
|
||||
import { ActionCard } from 'components/layouts/Tabs/ActionCard'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { uuidv4 } from 'lib/helpers'
|
||||
@@ -26,7 +26,7 @@ const SQLQuickstarts = () => {
|
||||
|
||||
const snapV2 = useSqlEditorV2StateSnapshot()
|
||||
|
||||
const { can: canCreateSQLSnippet } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateSQLSnippet } = useAsyncCheckPermissions(
|
||||
PermissionAction.CREATE,
|
||||
'user_content',
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ import { useParams } from 'common'
|
||||
import { SQL_TEMPLATES } from 'components/interfaces/SQLEditor/SQLEditor.queries'
|
||||
import { ActionCard } from 'components/layouts/Tabs/ActionCard'
|
||||
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
|
||||
import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { uuidv4 } from 'lib/helpers'
|
||||
@@ -26,7 +26,7 @@ const SQLTemplates = () => {
|
||||
|
||||
const snapV2 = useSqlEditorV2StateSnapshot()
|
||||
|
||||
const { can: canCreateSQLSnippet } = useAsyncCheckProjectPermissions(
|
||||
const { can: canCreateSQLSnippet } = useAsyncCheckPermissions(
|
||||
PermissionAction.CREATE,
|
||||
'user_content',
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user