При настройке прав доступа в конфигурации «1С:Управление производственным предприятием 1.3» часто возникает соблазн ограничить видимость конфиденциальных документов (например, кассовых ордеров), сняв право чтения непосредственно в базовой роли Пользователь. Давайте разберем по шагам, почему типовая архитектура УПП устроена именно так, с какими критическими ошибками можно столкнуться при урезании прав базовой роли и какие альтернативные решения существуют.
Первая трудность, с которой сталкиваются разработчики при попытке создать альтернативную роль на базе типовой — запрет на копирование и добавление новых объектов. Даже если для всех ролей в окне настройки поддержки указано «Редактируется с сохранением поддержки», объект может не копироваться.
Выясним причину такого поведения. Дело в том, что возможность добавления новых объектов метаданных определяется правилом поддержки корневого узла конфигурации, а не отдельных его подчиненных веток. Если на корне конфигурации стоит пиктограмма нередактируемого замка, платформа полностью блокирует вставку и создание любых новых метаданных.
Чтобы разрешить создание новых ролей, выполним следующие действия:
Роль Пользователь в УПП 1.3 является фундаментальной. Платформа 1С работает по аддитивному принципу: если право дано хотя бы в одной назначенной пользователю роли, оно действует. Поскольку роль Пользователь выдается абсолютно всем учетным записям для базового входа и работы в системе, снятие права чтения именно в ней кажется очевидным решением. Однако это влечет за собой целый ряд скрытых архитектурных проблем.
Проанализируем технические последствия отключения права Чтение на документ (например, ПриходныйКассовыйОрдер):
ВЫБРАТЬ РАЗРЕШЕННЫЕ. Если такой типовой запрос попытается соединиться с таблицей кассовых документов, сеанс пользователя аварийно завершится системной ошибкой прав доступа.ПриходныйКассовыйОрдер часто выступает регистратором движений по взаиморасчетам, денежным средствам или бухгалтерским счетам, а также аналитикой (субконто). Лишив пользователя права физического чтения документа-регистратора, мы лишаем его возможности открывать или формировать движения по связанным регистрам.СвязанныеДокументы строит полное дерево подчиненности. При отсутствии права чтения хотя бы на одну строку в цепочке документов попытка пользователя посмотреть связанные документы вызовет ошибку ограничения доступа.<Объект не найден> с внутренним идентификатором (GUID).Пользователь, иначе новые механизмы перестанут работать.Рассмотрим безопасные варианты ограничения доступа, которые не нарушают ссылочную целостность и работу базовых механизмов конфигурации.
В платформе 1С права Чтение и Просмотр выполняют принципиально разные функции. Чтение дает доступ на уровне базы данных (для работы запросов, проведения, получения представлений ссылок). Просмотр отвечает за видимость объекта в пользовательском интерфейсе.
Если в роли Пользователь оставить флаг Чтение, но снять флаг Просмотр:
В конфигурациях на обычных формах, к которым относится УПП 1.3, видимость разделов и документов настраивается через объекты метаданных типа Интерфейс. Если пользователю не требуется работать с кассой, достаточно назначить ему специализированный интерфейс (например, «Интерфейс менеджера по продажам»), исключив из него кассовые подсистемы и журнал кассовых документов, а также отключить доступ к полному интерфейсу и меню «Операции».
Если требуется запретить чтение конкретных сумм и деталей кассовых ордеров узкому кругу лиц, не нарушая фоновые алгоритмы, можно использовать программный контроль в обработчике события формы документа:
Процедура ПриОткрытии(Отказ)
// Проверяем, входит ли пользователь в разрешенную категорию
Если Не РольДоступна("УправлениеДенежнымиСредствами")
И Не РольДоступна("ПолныеПрава") Тогда
Отказ = Истина;
ПоказатьПредупреждение(, "У вас нет прав на просмотр кассовых документов!");
КонецЕсли;
КонецПроцедуры
При таком подходе данные документа остаются доступными для алгоритмов конфигурации, отчетов и проведения связанных накладных, но интерактивный просмотр финансовой информации для неавторизованного сотрудника будет заблокирован.