@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
36 lines (34 loc) • 1.15 kB
JavaScript
import { fetchPolicies } from "../../lib/fetch-policies.js";
import { fetchPermissions } from "../../lib/fetch-permissions.js";
import { uniq } from "lodash-es";
//#region src/permissions/modules/fetch-allowed-fields/fetch-allowed-fields.ts
/**
* Look up all fields that are allowed to be used for the given collection and action for the given
* accountability object
*
* Done by looking up all available policies for the current accountability object, and reading all
* permissions that exist for the collection+action+policy combination
*/
async function fetchAllowedFields({ accountability, action, collection }, { knex, schema }) {
const policies = await fetchPolicies(accountability, {
knex,
schema
});
const permissions = await fetchPermissions({
action,
collections: [collection],
policies,
accountability
}, {
knex,
schema
});
const allowedFields = [];
for (const { fields } of permissions) {
if (!fields) continue;
allowedFields.push(...fields);
}
return uniq(allowedFields).filter((field) => field === "*" || field in (schema.collections[collection]?.fields ?? {}));
}
//#endregion
export { fetchAllowedFields };