В процессе настройки 1С:Управление нашей фирмой (УНФ) версии 3.0 специалисты часто сталкиваются с ситуацией, когда ограничение доступа на уровне записей (RLS) по организациям работает корректно, а аналогичные настройки для складов (структурных единиц) игнорируются системой — для решения этой проблемы есть исправление игнорирования RLS по складам в 1С:УНФ. В результате пользователь продолжает видеть все склады и магазины, несмотря на установленные запреты в профилях групп доступа. Проанализируем причины этой проблемы и разберем по шагам методы ее решения.
Для начала разберем фундаментальный механизм работы прав доступа в платформе 1С:Предприятие 8.3. В системе реализован принцип аддитивности: если пользователю назначено несколько ролей, то итоговое право вычисляется по правилу логического «ИЛИ». Это означает, что если хотя бы в одной из назначенных ролей право на Чтение объекта дано без ограничений, то настройки RLS во всех остальных ролях будут полностью нивелированы.
Рассмотрим конкретную ситуацию в 1С:УНФ 3.0. Проблема чаще всего кроется в роли БазовыеПраваПриложения (или аналогичных системных ролях БСП). Разработчики конфигурации намеренно включают в эту роль неограниченное право на чтение справочника СтруктурныеЕдиницы. Это делается для того, чтобы избежать аварийного завершения работы программы (Runtime Error) при открытии форм документов, где склад является обязательным реквизитом, или при формировании базовых интерфейсных элементов.
Проанализируем ситуацию: в профиле доступа вы ограничиваете склад через RLS, но пользователю автоматически (через типовые группы доступа) назначается роль БазовыеПраваПриложения — для аудита настроек поможет инструмент настройки и аудита прав доступа в 1С. Поскольку в ней стоит «галочка» на чтение справочника без условий, система игнорирует ваши настройки RLS.
Прежде чем вносить изменения в конфигурацию, нам необходимо точно определить «виновную» роль. Выясним причину избыточного доступа, выполнив следующие действия: для этой задачи есть обработка для анализа прав и ролей пользователей.
СтруктурныеЕдиницы и вид права — Чтение (для более глубокой проверки можно применить анализ и сравнение ролей).Проанализировав отчет, мы увидим список всех ролей, дающих право на этот справочник. Если в колонке «Ограничение доступа» для какой-либо роли (например, БазовыеПраваПриложения, ЧтениеСтруктурныхЕдиниц или ДобавлениеИзменениеСкладскихДокументов) отсутствует надпись Ограничено, это и есть причина проблемы.
В современных версиях УНФ используется так называемый «Производительный RLS». Это механизм, при котором данные об ограничениях предварительно рассчитываются и записываются в специальные служебные таблицы. Если эти данные не актуальны, ограничения могут не работать. Проверим техническое состояние подсистемы:
Проанализируем раздел Настройки — Настройки пользователей и прав — Ограничивать доступ на уровне записей. Убедимся, что флаг установлен. Затем проверим состояние регламентных заданий. Нам необходимо убедиться, что задание Заполнение данных для ограничения доступа завершено успешно. Если вы только что изменили настройки в профиле, можно выполнить точечный пересчет прав доступа принудительно через Обслуживание — Регламентные операции.
Если диагностика на первом шаге подтвердила, что роль БазовыеПраваПриложения перекрывает RLS, правильным решением будет использование расширения. Это позволит сохранить конфигурацию на поддержке.
Разберем алгоритм создания исправления:
БазовыеПраваПриложения.СтруктурныеЕдиницы.Чтение или, что более правильно, добавим в поле Ограничение доступа к данным стандартный шаблон ограничения из библиотеки стандартных подсистем (БСП).Пример типичного шаблона для ограничения по значению (если используется БСП):
#ПоЗначению("Справочник.СтруктурныеЕдиницы", "Чтение", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
После применения расширения и обновления конфигурации базы данных, система начнет проверять условия RLS во всех ролях, и «лишнее» право исчезнет.
Важно понимать, что ограничение прав на сам справочник СтруктурныеЕдиницы — это лишь половина дела. В УНФ данные о товарах хранятся в регистрах накопления (например, Запасы). Если вы ограничили видимость склада, но не ограничили чтение регистров в разрезе этого склада, пользователь может не видеть склад в списке, но увидит его название в отчетах по остаткам.
Посмотрим на ситуацию глубже: необходимо проверить, прописаны ли шаблоны RLS в ролях, отвечающих за работу с документами (Продажи, Закупки, СкладскиеАкты). В типовых конфигурациях УНФ 3.0.5 иногда встречаются пропуски шаблонов именно для разреза «Склады». В таком случае потребуется аналогичным образом через расширение добавить условия в соответствующие роли для следующих объектов:
Запасы;ЗапасыНаСкладах;ПриходнаяНакладная, РасходнаяНакладная, ПеремещениеЗапасов.Подводя итог, отметим, что «коробочный» RLS в УНФ по складам требует внимательной проверки состава ролей пользователя. Чаще всего проблема решается либо обновлением на более свежий релиз (где разработчики 1С уже скорректировали БазовыеПраваПриложения), либо созданием точечного расширения, ограничивающего «сквозное» чтение справочника.
Важный совет: всегда проверяйте результат настройки через отчет Права доступа под конкретным пользователем. Если вы видите символ + напротив объекта, это может означать как полный доступ, так и доступ по RLS. Ищите приписку Ограничение доступа (RLS). Если её нет — доступ неограничен, и настройки профиля работать не будут.