Prevent data providers from using arbitrary context-providing components as sources

This commit is contained in:
Andrew Kingston 2021-11-30 14:32:18 +00:00
parent 40aa9656e1
commit 2c91b89f02
3 changed files with 16 additions and 13 deletions

View File

@ -61,7 +61,7 @@ export const getComponentBindableProperties = (asset, componentId) => {
/** /**
* Gets all data provider components above a component. * Gets all data provider components above a component.
*/ */
export const getDataProviderComponents = (asset, componentId) => { export const getContextProviderComponents = (asset, componentId) => {
if (!asset || !componentId) { if (!asset || !componentId) {
return [] return []
} }
@ -143,7 +143,7 @@ export const getDatasourceForProvider = (asset, component) => {
*/ */
const getContextBindings = (asset, componentId) => { const getContextBindings = (asset, componentId) => {
// Extract any components which provide data contexts // Extract any components which provide data contexts
const dataProviders = getDataProviderComponents(asset, componentId) const dataProviders = getContextProviderComponents(asset, componentId)
// Generate bindings for all matching components // Generate bindings for all matching components
return getProviderContextBindings(asset, dataProviders) return getProviderContextBindings(asset, dataProviders)

View File

@ -1,5 +1,5 @@
<script> <script>
import { getDataProviderComponents } from "builderStore/dataBinding" import { getContextProviderComponents } from "builderStore/dataBinding"
import { import {
Button, Button,
Popover, Popover,
@ -58,10 +58,13 @@
...query, ...query,
type: "query", type: "query",
})) }))
$: dataProviders = getDataProviderComponents( $: contextProviders = getContextProviderComponents(
$currentAsset, $currentAsset,
$store.selectedComponentId $store.selectedComponentId
).map(provider => ({ )
$: dataProviders = contextProviders
.filter(component => component._component?.endsWith("/dataprovider"))
.map(provider => ({
label: provider._instanceName, label: provider._instanceName,
name: provider._instanceName, name: provider._instanceName,
providerId: provider._id, providerId: provider._id,

View File

@ -3,7 +3,7 @@
import { store, currentAsset } from "builderStore" import { store, currentAsset } from "builderStore"
import { tables } from "stores/backend" import { tables } from "stores/backend"
import { import {
getDataProviderComponents, getContextProviderComponents,
getSchemaForDatasource, getSchemaForDatasource,
} from "builderStore/dataBinding" } from "builderStore/dataBinding"
import SaveFields from "./SaveFields.svelte" import SaveFields from "./SaveFields.svelte"
@ -11,7 +11,7 @@
export let parameters export let parameters
export let bindings = [] export let bindings = []
$: dataProviderComponents = getDataProviderComponents( $: dataProviderComponents = getContextProviderComponents(
$currentAsset, $currentAsset,
$store.selectedComponentId $store.selectedComponentId
) )