fix: field level access for nested fields

This commit is contained in:
Dan Ribbens
2022-09-22 21:37:02 -04:00
parent 52a8e9624c
commit 22ea98ca33
5 changed files with 11 additions and 5 deletions

View File

@@ -6,7 +6,7 @@ export type Props = {
className?: string
readOnly?: boolean
forceRender?: boolean
permissions?: {
permissions?: FieldPermissions | {
[field: string]: FieldPermissions
}
filter?: (field: Field) => boolean

View File

@@ -75,7 +75,7 @@ const CollapsibleField: React.FC<Props> = (props) => {
<RenderFields
forceRender
readOnly={readOnly}
permissions={permissions?.fields}
permissions={permissions}
fieldTypes={fieldTypes}
fieldSchema={fields.map((field) => ({
...field,

View File

@@ -28,7 +28,7 @@ const Row: React.FC<Props> = (props) => {
<RenderFields
readOnly={readOnly}
className={classes}
permissions={permissions?.fields}
permissions={permissions}
fieldTypes={fieldTypes}
fieldSchema={fields.map((field) => ({
...field,

View File

@@ -71,7 +71,7 @@ const TabsField: React.FC<Props> = (props) => {
key={String(activeTab.label)}
forceRender
readOnly={readOnly}
permissions={permissions?.fields}
permissions={tabHasName(activeTab) ? permissions[activeTab.name].fields : permissions}
fieldTypes={fieldTypes}
fieldSchema={activeTab.fields.map((field) => ({
...field,

View File

@@ -1,6 +1,7 @@
import { PayloadRequest } from '../../express/types';
import { Permissions } from '../types';
import { adminInit as adminInitTelemetry } from '../../utilities/telemetry/events/adminInit';
import { tabHasName } from '../../fields/config/types';
const allOperations = ['create', 'read', 'update', 'delete'];
@@ -66,7 +67,12 @@ async function accessOperation(args: Arguments): Promise<Permissions> {
executeFieldPolicies(updatedObj, field.fields, operation);
} else if (field.type === 'tabs') {
field.tabs.forEach((tab) => {
executeFieldPolicies(updatedObj, tab.fields, operation);
if (tabHasName(tab)) {
if (!updatedObj[tab.name]) updatedObj[tab.name] = { fields: {} };
executeFieldPolicies(updatedObj[tab.name].fields, tab.fields, operation);
} else {
executeFieldPolicies(updatedObj, tab.fields, operation);
}
});
}
});