Как правильно настроить управление доступом RLS в БСП 3.x при разработке конфигурации с нуля

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке новой конфигурации на базе Библиотеки стандартных подсистем (БСП) одной из самых сложных и ответственных задач является настройка системы разграничения прав доступа на уровне записей (RLS). В современных версиях БСП (3.0 и выше) механизмы управления доступом претерпели значительные изменения, перейдя к так называемому «производительному» или «универсальному» режиму. В этой статье мы подробно разберем, как интегрировать подсистему «Управление доступом», настроить собственные виды доступа на примере справочника Организации и решить типичные проблемы, возникающие при проверке внедрения БСП.

Переход к универсальному режиму ограничения доступа

Первым делом проанализируем выбор режима работы RLS. В БСП существует два основных режима: классический и универсальный (производительный). Рассмотрим, почему стоит выбирать именно универсальный режим. В этом режиме система не вычисляет права «на лету» при каждом запросе, что сильно нагружает базу данных, а использует заранее подготовленные таблицы ключей доступа. Это позволяет значительно ускорить работу списков и отчетов.

Для включения этого режима необходимо убедиться, что в панели администрирования (или программно через константы) включена опция Ограничивать доступ на уровне записей универсально. Несмотря на то, что в некоторых версиях она может быть помечена как «ознакомительная», для новых конфигураций на БСП 3.x это основной рекомендуемый путь развития. Проигнорировав это, мы рискуем столкнуться с низкой производительностью системы при росте объема данных.

Шаг 1: Регистрация собственного справочника в системе доступа

Предположим, мы создали свой справочник Организации. Чтобы БСП начала воспринимать его как объект, по которому можно ограничивать права, выполним следующие действия:

  1. Расширение определяемых типов. Нам необходимо включить наш справочник в определяемый тип ЗначениеДоступа. Это даст системе понять, что элементы данного справочника могут использоваться в качестве «разрешенных значений» в профилях групп доступа.
  2. Настройка связи в переопределяемом модуле. Перейдем в модуль УправлениеДоступомПереопределяемый. Нам нужно найти процедуру ПриЗаполненииСпискаТиповЗначенийДоступа и добавить туда описание нашего справочника.

Рассмотрим пример кода, который необходимо добавить:


Процедура ПриЗаполненииСпискаТиповЗначенийДоступа(Список) Экспорт
    
    // Добавляем наш справочник Организации как тип значения доступа
    Описание = Список.Добавить();
    Описание.Тип = Тип("СправочникСсылка.Организации");
    Описание.Наименование = "Организации";
    
КонецПроцедуры

Шаг 2: Настройка логики ограничения в модуле менеджера

Теперь выясним, как связать данные конкретных объектов (документов, других справочников) с нашей организацией. В БСП 3.x основная логика RLS описывается непосредственно в модулях менеджеров объектов. Рассмотрим процедуру ПриЗаполненииОграниченияДоступа. Мы должны добавить её в каждый объект, который подлежит ограничению.

Для документа, у которого есть реквизит Организация, код будет выглядеть следующим образом:


Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    
    Ограничение.Текст =
    "РазрешитьЧтениеИзменение
    |ГДЕ
    |ЗначениеДоступа(Организация)";
    
КонецПроцедуры

Если же мы решаем более сложную задачу, например, ограничение доступа к справочнику АдминистраторыПрограмм, который связан с организацией, мы можем прописать путь через точку:


Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    
    Ограничение.Текст =
    "РазрешитьЧтениеИзменение
    |ГДЕ
    |ЗначениеДоступа(Владелец)"; // Если организация является владельцем
    
    // Или если это реквизит:
    // Ограничение.Текст = "РазрешитьЧтениеИзменение ГДЕ ЗначениеДоступа(Организация)";
    
КонецПроцедуры

Шаг 3: Работа с ролями и шаблонами ограничений

Проанализируем ситуацию с ролями. Для того чтобы RLS заработал, в метаданных роли на соответствующие таблицы (Чтение, Добавление, Изменение) должно быть установлено ограничение с использованием шаблонов БСП #ДляОбъекта или #ДляРегистра.

Разберем типичный синтаксис шаблона в поле ограничения доступа:

#ДляОбъекта("Организация")

Важно помнить, что если вы используете универсальный режим, текст внутри шаблона #ДляОбъекта должен строго соответствовать эталонному тексту, определенному в БСП. Это подводит нас к решению проблемы, озвученной в сообщении 6 форума.

Решение проблемы: «Шаблон ограничения не соответствует эталону»

Часто при внедрении или обновлении БСП проверка выдает ошибку о несоответствии шаблона #ДляОбъекта в роли ДобавлениеИзменениеРассылокОтчетов (или любой другой). БСП выполняет проверку CRC (контрольной суммы) текста шаблона. Если в тексте шаблона есть лишний пробел, перенос строки или комментарий, проверка не пройдет.

Чтобы исправить это, выполним следующие шаги:

  1. Найдем в конфигурации «эталонную» роль. Обычно это роль ПолныеПрава или ИзменениеУчастниковГруппДоступа.
  2. Откроем вкладку Шаблоны ограничений в этой роли.
  3. Скопируем текст шаблона ДляОбъекта.
  4. Перейдем в роль, на которую ругается система (например, ДобавлениеИзменениеРассылокОтчетов).
  5. Заменим текст шаблона на скопированный. Важно: делайте это через Ctrl+A, чтобы не оставить лишних символов.

Шаг 4: Обновление ключей доступа в пользовательском режиме

После внесения всех изменений в код и метаданные, нам нужно заставить систему пересчитать права. В БСП за это отвечает механизм обновления ключей доступа. При первом запуске или после изменения метаданных необходимо запустить обработку Обновление вспомогательных данных (часть стандартных инструментов разработчика БСП) или дождаться выполнения регламентного задания «Обновление ключей доступа».

Посмотрим, как проверить результат. В режиме «1С:Предприятие» зайдите в раздел Администрирование — Настройки пользователей и прав — Группы доступа. Создайте профиль, добавьте в него вашу роль и в таблице «Виды доступа» вы должны увидеть вашу «Организацию». После настройки ограничений для конкретной группы доступа, пользователь увидит только те записи, которые соответствуют его разрешенным организациям.

Заключение

Мы рассмотрели базовый цикл настройки RLS в БСП 3.x. Главные выводы: используйте универсальный режим, не забывайте регистрировать типы в модуле УправлениеДоступомПереопределяемый и строго следите за идентичностью текстов шаблонов в ролях. Использование методов БСП значительно упрощает разработку, так как вам не нужно писать сложные SQL-подобные запросы в каждой роли — достаточно один раз описать логику в модуле менеджера объекта.

← На главную