UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

42 lines (40 loc) 1.31 kB
import { fetchPolicies } from "../../../permissions/lib/fetch-policies.js"; import { fetchPermissions } from "../../../permissions/lib/fetch-permissions.js"; import { getDBQuery } from "../lib/get-db-query.js"; import { parseCurrentLevel } from "../lib/parse-current-level.js"; import { cloneDeep } from "lodash-es"; //#region src/database/run-ast/modules/fetch-permitted-ast-root-fields.ts /** * Fetch the permitted top level fields of a given root type AST using a case/when query that is constructed the * same way as `runAst` but only returns flags (1/null) instead of actual field values. */ async function fetchPermittedAstRootFields(originalAST, { schema, accountability, knex, action }) { const { name: collection, children, cases, query } = cloneDeep(originalAST); const { fieldNodes } = await parseCurrentLevel(schema, collection, children, query); let permissions = []; if (accountability && !accountability.admin) permissions = await fetchPermissions({ action, accountability, policies: await fetchPolicies(accountability, { schema, knex }) }, { schema, knex }); return getDBQuery({ table: collection, fieldNodes, o2mNodes: [], query, cases, permissions, permissionsOnly: true }, { schema, knex }); } //#endregion export { fetchPermittedAstRootFields };