fix: field level access for nested fields
This commit is contained in:
@@ -6,7 +6,7 @@ export type Props = {
|
||||
className?: string
|
||||
readOnly?: boolean
|
||||
forceRender?: boolean
|
||||
permissions?: {
|
||||
permissions?: FieldPermissions | {
|
||||
[field: string]: FieldPermissions
|
||||
}
|
||||
filter?: (field: Field) => boolean
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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) => {
|
||||
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);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user