mirror of
https://github.com/supabase/supabase.git
synced 2026-06-08 02:25:04 +08:00
chore: move role impersonation state into a context (#19510)
* chore: move role impersonation state into a context * clean up ProjectContext.tsx imports * move isRoleImpersonationEnabled to only relevant queries
This commit is contained in:
@@ -13,7 +13,6 @@ import {
|
||||
ROLE_IMPERSONATION_NO_RESULTS,
|
||||
ROLE_IMPERSONATION_SQL_LINE_COUNT,
|
||||
} from 'lib/role-impersonation'
|
||||
import { getRoleImpersonationStateSnapshot } from 'state/role-impersonation-state'
|
||||
import { sqlKeys } from './keys'
|
||||
|
||||
export type Error = { code: number; message: string; requestId: string }
|
||||
@@ -24,6 +23,7 @@ export type ExecuteSqlVariables = {
|
||||
sql: string
|
||||
queryKey?: QueryKey
|
||||
handleError?: (error: { code: number; message: string; requestId: string }) => any
|
||||
isRoleImpersonationEnabled?: boolean
|
||||
}
|
||||
|
||||
export async function executeSql(
|
||||
@@ -33,9 +33,15 @@ export async function executeSql(
|
||||
sql,
|
||||
queryKey,
|
||||
handleError,
|
||||
isRoleImpersonationEnabled = false,
|
||||
}: Pick<
|
||||
ExecuteSqlVariables,
|
||||
'projectRef' | 'connectionString' | 'sql' | 'queryKey' | 'handleError'
|
||||
| 'projectRef'
|
||||
| 'connectionString'
|
||||
| 'sql'
|
||||
| 'queryKey'
|
||||
| 'handleError'
|
||||
| 'isRoleImpersonationEnabled'
|
||||
>,
|
||||
signal?: AbortSignal
|
||||
) {
|
||||
@@ -44,8 +50,6 @@ export async function executeSql(
|
||||
let headers = new Headers()
|
||||
if (connectionString) headers.set('x-connection-encrypted', connectionString)
|
||||
|
||||
const isRoleImpersonationEnabled = getRoleImpersonationStateSnapshot().role?.type === 'postgrest'
|
||||
|
||||
let { data, error } = await post('/platform/pg-meta/{ref}/query', {
|
||||
signal,
|
||||
params: {
|
||||
@@ -107,13 +111,23 @@ export type ExecuteSqlData = Awaited<ReturnType<typeof executeSql>>
|
||||
export type ExecuteSqlError = unknown
|
||||
|
||||
export const useExecuteSqlQuery = <TData = ExecuteSqlData>(
|
||||
{ projectRef, connectionString, sql, queryKey, handleError }: ExecuteSqlVariables,
|
||||
{
|
||||
projectRef,
|
||||
connectionString,
|
||||
sql,
|
||||
queryKey,
|
||||
handleError,
|
||||
isRoleImpersonationEnabled,
|
||||
}: ExecuteSqlVariables,
|
||||
{ enabled = true, ...options }: UseQueryOptions<ExecuteSqlData, ExecuteSqlError, TData> = {}
|
||||
) =>
|
||||
useQuery<ExecuteSqlData, ExecuteSqlError, TData>(
|
||||
sqlKeys.query(projectRef, queryKey ?? [md5(sql)]),
|
||||
({ signal }) =>
|
||||
executeSql({ projectRef, connectionString, sql, queryKey, handleError }, signal),
|
||||
executeSql(
|
||||
{ projectRef, connectionString, sql, queryKey, handleError, isRoleImpersonationEnabled },
|
||||
signal
|
||||
),
|
||||
{ enabled: enabled && typeof projectRef !== 'undefined', ...options }
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user