При организации многофирменного учета в 1С:ERP Управление предприятием часто возникает задача изолировать данные: сделать так, чтобы бухгалтеры или менеджеры работали исключительно с документами и справочниками своей организации, не имея доступа к чужим данным. Однако при настройке типового механизма RLS (Record Level Security — ограничение доступа на уровне записей) специалисты нередко сталкиваются с ситуацией, когда часть документов остается видимой либо при выполнении операций возникают системные ошибки нарушения прав доступа. Разберем архитектуру механизма ограничений, выясним причины такого поведения и рассмотрим надежные способы настройки прав.
Проанализируем базовый механизм подсистемы управления доступом Библиотеки Стандартных Подсистем (БСП), используемый в конфигурациях линейки ERP:
ГруппыДоступаНоменклатуры, ГруппыДоступаКонтрагентов), доступ к организациям настраивается напрямую по элементам справочника Организации. Промежуточный справочник «Группы доступа организаций» отсутствует, так как ограничения связываются непосредственно с ссылками на сами организации.РАЗРЕШЕННЫЕ. В этом случае, если запрос пытается прочитать записи, недоступные текущему пользователю по правилам RLS, система аварийно завершает операцию с ошибкой «Нарушение прав доступа».Если определенные типовые документы (например, ДепонированиеЗарплаты или документы выпуска) не содержат условий ограничения в поставляемых ролях, решим задачу путем создания собственных ролей на базе типовых. Разберем порядок действий по шагам:
ДобавлениеИзменениеДепонированнойЗарплаты в новую роль ДобавлениеИзменениеДепонированнойЗарплатыСcustomRLS).#ПоЗначениям или #ДляОбъекта, скопированные из базовых ролей подсистемы управления доступом. Избегаем написания самописных условий на чистом SQL/языке запросов, чтобы не нарушать механизмы оптимизации БСП.УправлениеДоступомПереопределяемый в процедуре ПриЗаполненииВидовДоступа, если объекту требуется расширенное сопоставление полей.Посмотрим на пример структуры вызова шаблона БСП для ограничения по полю организации в тексте ограничения роли:
#ПоЗначениям( "Документ.ДепонированиеЗарплаты", "Чтение", "",
"Организации", "Организация",
"", "",
"", "",
"", "",
"", "" )
Важно: При каждом обновлении типовой конфигурации необходимо отслеживать изменения в исходных ролях-прототипах и переносить их в кастомные роли.
Если включение RLS приводит к падению регламентных отчетов или регламентных процедур из-за отсутствия директивы РАЗРЕШЕННЫЕ в коде конфигурации, рассмотрим следующие варианты обхода:
ОбновлениеКлючейДоступа и ЗаполнениеДанныхДляОграниченияДоступа выполняются по расписанию и завершаются без ошибок. Если регламентные задания зависают, права пользователей перестают обновляться.Когда жесткое разграничение на уровне базы данных не требуется службой безопасности, а цель заключается в защите от случайных ошибок ввода и визуальном разделении потоков документов для сотрудников разных филиалов, используем интерфейсный подход:
Организация значением по умолчанию и заблокируем его изменение на форме для рядовых пользователей.Такой подход полностью исключает влияние RLS на производительность базы данных и устраняет риск ошибок при формировании сложных сквозных аналитических отчетов.