В процессе разработки и сопровождения систем на базе 1С часто возникает ситуация, когда типовой механизм RLS (Record Level Security) слишком жестко ограничивает доступ. Стандартная логика «пользователь видит только свою организацию» перестает работать, если бизнес-процесс требует, чтобы сотрудники одной организации видели документы (например, заказы или перемещения) другой организации. В этой статье мы подробно разберем, как элегантно обойти это ограничение, сохранив безопасность и производительность системы.
Проанализируем самый простой и эффективный способ, который часто применяется в доработках. Если нам нужно, чтобы документ был виден в двух организациях (например, в организации-отправителе и организации-получателе), мы можем добавить в документ дополнительный реквизит.
Рассмотрим по шагам:
ДополнительнаяОрганизация (тип СправочникСсылка.Организации).Организация, мы добавляем условие ИЛИ по нашему новому реквизиту.Этот способ хорош тем, что он «прозрачен» для платформы и не требует сложных запросов к регистрам. Однако стоит помнить, что использование условия ИЛИ в запросах RLS на очень больших объемах данных может привести к замедлению работы, поэтому убедитесь, что оба поля индексированы.
Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), мы можем воспользоваться мощным механизмом расширенных шаблонов. Разберем пример реализации для документа перемещения, где доступ должен быть разрешен, если у пользователя есть права либо на склад-источник, либо на склад-приемник.
Посмотрим на пример шаблона, который можно прописать в ограничениях доступа на уровне метаданных:
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениямРасширенный( "Документ.ПеремещениеТоваров", "","",
"",
"",
"Организации", "Т.Организация", "И(",
"Склады","Т.СкладОтправитель", "ИЛИ",
"Склады","Т.СкладПолучатель", ")", "","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","")
#КонецЕсли
В данном примере мы видим использование макроса #ПоЗначениямРасширенный. Это позволяет системе гибко комбинировать права доступа. Если пользователь имеет доступ к организации И к одному из складов (отправителю ИЛИ получателю), документ станет видимым.
В ситуациях, когда логика доступа очень сложная и её невозможно описать простым добавлением реквизита, проанализируем вариант с регистром сведений. Мы создаем специальный регистр (например, ДоступныеДокументыПользователей), куда программно записываем пары «Документ — Пользователь» или «Документ — Организация».
Выясним преимущества этого подхода:
В шаблоне RLS в этом случае прописывается связь (JOIN) с этим регистром. Если запись в регистре существует — доступ разрешен.
Современные версии 1С и БСП используют так называемый «производительный RLS». В этом режиме права не вычисляются каждый раз при запросе, а кэшируются в регистре КлючиДоступаКОбъектам. Если вы изменили логику доступа (добавили реквизит или изменили шаблон), важно правильно зарегистрировать эти изменения в программном коде.
Разберем, что нужно сделать в модуле менеджера объекта. Необходимо найти или создать процедуру ПриЗаполненииОграниченияДоступа. Рассмотрим пример кода:
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьИзменениеУровняГруппДоступа = Ложь;
|УсловиеДоступаПоОрганизации(Т.Организация);
|УсловиеДоступаПоОрганизации(Т.ДополнительнаяОрганизация)";
КонецПроцедуры
После внесения таких изменений необходимо запустить обновление ключей доступа. Это можно сделать с помощью типовой обработки «Панель администрирования БСП» или программно вызвать обновление для конкретного типа объектов. Без этого шага система может продолжать использовать старые ограничения, и новые правила не вступят в силу.
Проанализируем несколько критических моментов, которые помогут избежать ошибок:
Привилегированный модуль вместо расширения прав RLS. Это сохранит чистоту прав доступа и защитит данные от случайного просмотра пользователями.Таким образом, мы рассмотрели несколько стратегий решения задачи. Выбор конкретного метода зависит от того, используете ли вы БСП, насколько велика ваша база данных и насколько часто меняются правила предоставления доступа к «чужим» документам.