Права доступа на реквизиты

09 марта 2013

Пользователь не должен видеть этот реквизит

Предположим, что заказчик поставил перед разработчиком задачу разграничения доступа на некоторый реквизит документа. В нашем примере это будет реквизит "Комментарий" в документе "Тестовый документ". У задачи множество вариантов реализации. В статье рассмотрим вариант с использованием механизма разграничения прав на реквизиты с использованием ролей. Данная возможность появилась в платформе 1С:Предприятие 8.2.

Настраиваем роль

Итак, приступим. В тестовой конфигурации создадим наш "Тестовый документ" с несколькими реквизитами и три роли (см. следующий скриншот).

Объекты в структуре метаданных тестовой конфигурации

Обратите внимание на роли "ДоступКомментарий" и "БезДоступаККомментарию". Обе роли имеют доступ к документу "Тестовый документ". Различие между ним лишь в настройке права доступа к реквизиту "Комментарий". На следующем скриншоте представлено различие между ними.

Настройка прав доступа на отдельный реквизит

Для дальнейшего тестирования создадим двух пользователей. Имена назначим в соответствии с присвоенными ролями: "Доступ к комментарию" и "Без доступа к комментарию". Теперь мы можем перейти к тестированию в режиме 1С:Предприятия.

Тестируем

Запустим программу в режиме 1С:Предприятие под пользователем "Без доступа к комментарию". Откроем документ и увидим результат наших действий:

Результат настройки прав доступа на реквизит

Как мы видим, реквизит "Комментарий" не отображается как в форме документа, так и в форме списка. Теперь запустим программу от имени пользователя "Доступ к комментарию". Тогда мы получим следующий результат:

Результат настройки прав доступа на реквизит

Теперь реквизит "Комментарий" доступен во всех открытых формах. В принципе, механизм работает. 

Данная настройка действует на все формы, открываемые в режиме предприятия. Но у механизма разграничения прав по реквизитам есть некоторые нюансы работы, о которых стоит упомянуть.

Подводный камень

Настраивать права для отдельных реквизитов очень удобно, но на самом деле этот механизм трудно отнести к настройкам прав доступа. И вот почему:

1) Если мы попытаемся выполнить запрос к реквизиту, доступ к которому ограничен, мы все равно получим его значение без каких-либо ошибок/предупреждений платформы.

Запрос к реквизиту с настроенными правами доступа

 

2) При формировании SQL-запросов к базе данных в клиент-серверном варианте работы, платформа не учитывает настройки доступа на уровне реквизитов.

На следующем скриншоте представлен текст SQL-запроса, формируемый платформой при открытии документа при обоих вариантах настройки доступа к полю "Комментарий".

Нет влияния на SQL-запрос платформы

Как мы видим, в запросе присутствует выборка поля "_Fld17", в которм присутствует значение комментария.

3) Механизм разграничения прав на уровне реквизитов работает только для управляемых форм.

Если открыть обычную форму в управляемом или обычном приложении, то настройка прав в ролях на реквизиты объектов не будет действовать.

Ограничение прав доступа на реквизиты действует только для управляемых форм

Как мы видим из примера выше, обычная форма, открытая в управляемом режиме, не учитывает права доступа на отдельные реквизиты.

Подведем итог

Возможности платформы 1С:Предприятие 8.2 по разграничению прав доступа на отдельные реквизиты объектов больше относятся к построению интерфейса, чем к настройке прав доступа пользователей. Поэтому при разработке системы прав доступа, программист должен учитывать изложенные выше нюансы работы данного механизма.

Наиболее правильными механизмами для разграничения прав доступа на объекты конфигурации - это настройка прав на отдельные объекты в ролях и механизм RLS.


comments powered by Disqus