Предположим, что заказчик поставил перед разработчиком задачу разграничения доступа на некоторый реквизит документа. В нашем примере это будет реквизит "Комментарий" в документе "Тестовый документ". У задачи множество вариантов реализации. В статье рассмотрим вариант с использованием механизма разграничения прав на реквизиты с использованием ролей. Данная возможность появилась в платформе 1С:Предприятие 8.2.
Итак, приступим. В тестовой конфигурации создадим наш "Тестовый документ" с несколькими реквизитами и три роли (см. следующий скриншот).
Обратите внимание на роли "ДоступКомментарий" и "БезДоступаККомментарию". Обе роли имеют доступ к документу "Тестовый документ". Различие между ним лишь в настройке права доступа к реквизиту "Комментарий". На следующем скриншоте представлено различие между ними.
Для дальнейшего тестирования создадим двух пользователей. Имена назначим в соответствии с присвоенными ролями: "Доступ к комментарию" и "Без доступа к комментарию". Теперь мы можем перейте к тестированию в режиме 1С:Предприятия.
Запустим программу в режиме 1С:Предприятие под пользователем "Без доступа к комментарию". Откроем документ и увидим результат наших действий:
Как мы видим, реквизит "Комментарий" не отображается как в форме документа, так и в форме списка. Теперь запустим программу от имени пользователя "Доступ к комментарию". Тогда мы получим следующий результат:
Теперь реквизит "Комментарий" доступен во всех открытых формах. В принципе, механизм работает.
Данная настройка действует на все формы, открываемые в режиме предприятия. Но у механизма разграничения прав по реквизитам есть некоторые нюансы работы, о которых стоит упомянуть.
Настраивать права для отдельных реквизитов очень удобно, но на самом деле этот механизм трудно отнести к настрокам прав доступа. И вот почему:
1) Если мы попытаемся выполнить запрос к реквизиту, доступ к которому ограничен, мы все равно получим его значение без каких-либо ошибок/предупреждений платформы.
2) При формировании SQL-запросов к базе данных в клиент-серверном варианте работы, платформа не учитывает настройки доступа на уровне реквизитов.
На следующем скриншоте представлен текст SQL-запроса, формируемый платформой при открытии документа при обоих вариантах настройки доступа к полю "Комментарий".
Как мы видим, в запросе присутствует выборка поля "_Fld17", в которм присутствует значение комментария.
3) Механизм разграничения прав на уровне реквизитов работает только для управляемых форм.
Если открыть обычную форму в управляемом или обычном приложении, то настройка прав в ролях на реквизиты объектов не будет действовать.
Как мы видим из примера выше, обычная форма, открытая в управляемом режиме, не учитывает права доступа на отдельные реквизиты.
Возможности платформы 1С:Предприятие 8.2 по разграничению прав доступа на отдельные реквизиты объектов больше относятся к построению интерфейса, чек к настроке прав для пользователей. Поэтому при разработке системы прав доступа, программист должен учитывать изложенные выше нюансы работы данного механизма.
Наиболее правильными механизмами для разраничения прав доступа на объекты конфигурации - это настрока прав на отдельные объекты в ролях и механизм RLS.