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