You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Due to how the Craft fields service handles layout updates (they delete the layout and re-create it every time https://github.com/craftcms/cms/blob/master/src/services/Fields.php#L1248) the permissions attached to one field get deleted every time a layout is saved because the ON CASCADE FK on fieldId references the fieldlayoutfields table.
When the Fab service saves the permissions (in the saveFieldLayoutPermissions method) it only saves the permissions of the layout being modified at that moment, the rest remain deleted.
Is there any way to re-use a field across different layouts?
The text was updated successfully, but these errors were encountered:
goraxan
changed the title
Permissions overwritten if the same field is re-used in different sections
Permissions overwritten if the same field is re-used in different layouts
Jul 2, 2020
One way of solving it would be to remove the FKs to fieldlayoutfields and fieldlayouttabs, thus avoid the implicit deletion of the current permissions every time a layout is saved, and rely on EVENT_AFTER_DELETE_FIELD_LAYOUT and EVENT_AFTER_DELETE_FIELD events to explicitly delete the related permissions upon deletion.
Thanks @goraxan, I hadn't encountered this scenario—It is a bit of a pain how Craft re-creates the layout each time. What you've suggested sounds like a good solution though so I'll have a crack and keep you updated.
Due to how the Craft fields service handles layout updates (they delete the layout and re-create it every time https://github.com/craftcms/cms/blob/master/src/services/Fields.php#L1248) the permissions attached to one field get deleted every time a layout is saved because the ON CASCADE FK on fieldId references the fieldlayoutfields table.
When the Fab service saves the permissions (in the saveFieldLayoutPermissions method) it only saves the permissions of the layout being modified at that moment, the rest remain deleted.
Is there any way to re-use a field across different layouts?
The text was updated successfully, but these errors were encountered: