Mi tarea es crear un sistema de permisos que no esté predefinido por roles. Por ejemplo, el sistema no define las funciones que un administrador puede asignar a otros usuarios. En cambio, el sistema solo proporciona todas las tablas de la base de datos y el administrador puede crear sus propios roles sobre la marcha eligiendo tablas y el nivel de concesión (CRUD) y también qué campos deben estar visibles. Esa sería la parte fácil.
La implementación actual sin ningún permiso es obtener los datos con una API RESTful y luego crear el DOM mediante javascript. Dado que javascript sabe qué mostrar en la página actual, puede obtener las propiedades del objeto de datos o incluso obtener datos relacionados.
Pero ahora los campos devueltos por la llamada a la API pueden ser diferentes de un usuario a otro. ¿Cómo puedo mostrar solo los datos que un usuario puede ver?
Ejemplo:
En la imagen de abajo vemos el elemento actual mostrando solo los campos de nombre y descripción. Estos pueden ser editados por el usuario actual. También hay una entrada de posición para definir el orden de la imagen, pero el usuario no tiene permiso para cambiar eso y no se genera. Estado inicial, datos obtenidos de la API
Cuando hacemos clic en "nueva imagen", se agrega una nueva fila con javascript, pero ahora el campo "posición" está visible. Después de hacer clic en "nueva imagen"
El código JS no sabe qué campos puede ver el usuario y cuáles no. ¿Cómo puedo controlar ese comportamiento?
¿Debería crear una nueva API que obtenga la "estructura" de la página en función del permiso de los usuarios actuales o debería modificar el código javascript con php para generar solo la lógica requerida para el usuario actual?
¿Cuál debería ser el enfoque general y ya hay algo disponible en cakephp?
mi solución actual es hacer una solicitud a un nuevo punto final que me da un objeto de datos vacío pero solo con campos visibles para el usuario.
evento de botón -> buscar api/newEmptyObject -> representar campos de entrada
la desventaja es que agrega un retraso desde el evento de clic del usuario hasta la visualización de los campos de entrada.