визуализация частичного представления на основе разрешений пользователя

#javascript #php #cakephp

Вопрос:

Моя задача состоит в том, чтобы создать систему разрешений, которая не предопределена ролями. Например, система не определяет роли, которые администратор может назначить другим пользователям. Вместо этого система предоставляет только все таблицы базы данных, и администратор может создавать свои собственные роли на лету, выбирая таблицы и уровень предоставления (CRUD), а также поля, которые должны быть видны. Это было бы самой легкой частью.

Текущая реализация без каких-либо разрешений заключается в извлечении данных с помощью API RESTful, а затем создании DOM с помощью javascript. Поскольку javascript знает, что отображать на текущей странице, он может извлекать свойства из объекта данных или даже извлекать связанные данные.

Но теперь возвращаемые поля из вызова API могут отличаться от пользователя к пользователю. Как я могу отображать только те данные, которые пользователю разрешено просматривать?

Пример:

На рисунке ниже мы видим текущий элемент, показывающий только поля имени и описания. Их может редактировать текущий пользователь. Также есть ввод позиции для определения порядка изображения, но у пользователя нет разрешения на его изменение, и оно не генерируется. Начальное состояние, данные, извлеченные из API

Когда мы нажимаем на «новое изображение», новая строка добавляется с помощью javascript, но теперь поле «позиция» отображается. После нажатия кнопки «Создать изображение»

В коде JS теперь не указано, какие поля пользователь может видеть, а какие нет. Как я могу контролировать это поведение?

Должен ли я создать новый API, который будет извлекать «структуру» страницы на основе разрешения текущего пользователя, или мне следует изменить код javascript с помощью php, чтобы выводить только необходимую логику для текущего пользователя?

Каким должен быть общий подход и есть ли уже что-то доступное в cakephp?

Комментарии:

1. Просто скопировать первую строку не получится. Что происходит, когда мы добавляем первое изображение?