Оригинал на GitHub
Вопрос
Есть таблица регистрации персональных данных пользователей. После первичного занесения пользователя (логин/пароль) в системную таблицу "пользователи" нужно дать созданному пользователю доступ только к его строке в таблице регистрации данных для самостоятельного занесения оставшихся персональных данных. Каким образом это сделать?
Ответ
Ограничение доступа пользователей только к определенным строкам в таблице осуществляется при помощи Префильтров. Если поле префильтра привязано к полю строчной части и недоступно для редактирования (видимость не имеет в этом случае значения) для пользователя, то это поле префильтра работает как ограничитель доступа на стороне сервера.
В строчной части таблицы должно быть поле в котором например храняться id пользователей, к этому полю привязываем поле префильтра. В поле префильтра кодом вычисляем значение id текущего пользователя, открывшего таблицу:
Поле префильтра, определяющее id текущего пользователя:
=: $#nu
Можно доработать этот код, что бы обеспечить больше удобства для пользователей, которые должны видеть всю таблицу:
=: if(condition: $#nr = json`[1,5]`; then: ""; else: $#nu)
В этом коде мы проверяем роли текущего пользователя и если среди них есть роль 1 или 5, то мы ставим пустое значение в поле префильтра, что равнозначно его отключению, если это поле типа Строка или Число. Если у пользователя нет этих ролей, то код возвращает id текущего пользователя.
Если в префильтре поле-ограничитель имеет тип Селект или Селект-дерево, то вместо "" надо передать "*ALL*"
:
=: if(condition: $#nr = json`[1,5]`; then: "*ALL*"; else: $#nu)
Для таблицы Циклов этот подход не работает, так как в Циклах необходимо помимо ограничения доступа к строкам в таблице Циклов, ограничивать доступ к таблицам внутри цикла. Это делается при помощи параметра настроек таблицы: Тип доступа к циклам. В связке с техническим полем creator_id в таблице циклов и настройками в таблице users: boss_id, add_users и all_connected_users.