Feature: #103521 - Change table restrictions UI to combine read and write permissions

See forge#103521

Description

The tables_select and tables_modify fields of the be_groups table store information about permissions to read and write into selected database tables.

Due to TYPO3's internal behavior, when write permissions are granted for some tables, those tables are also automatically available for reading.

To make managing table permissions much easier and more efficient for integrators, the separate form fields for Tables (listing) [tables_select] and Tables (modify) [tables_modify] have been combined into a single UI element. This field now offers separate radio buttons to define which tables the backend user group should have permission to read and / or write. This is done by selecting one of the "No Access", "Read" or "Read & Write" options.

To further improve the user experience, it is also possible to use the "Check All", "Uncheck All" and "Toggle Selection" options for each permission.

Under the hood, when these permissions are processed, they are still saved separately in the tables_select and tables_modify columns in the be_groups table, as they were before.

To render this new table view and handle its behavior, a dedicated form renderType tablePermission has been introduced, which is now set for the tables_modify column. The tables_select column has been changed to TCA type passthrough.

The new form element is defined through: \TYPO3\CMS\Backend\Form\Element\TablePermissionElement . It uses a dedicated data provider defined in: \TYPO3\CMS\Backend\Form\FormDataProvider\TcaTablePermission . The JavaScript code is handled by a new web component: @typo3/backend/form-engine/element/table-permission-element.js.

When the TcaTablePermission data provider handles the configuration, it reads table lists from both the tables_select and tables_modify columns and combines them into a single array with unique table names.

Impact

Managing table permissions for backend user groups has been improved by visually combining the Tables (listing) [tables_select] and Tables (modify) [tables_modify] options, as well as by adding the multi record selection functionality.