Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Публикация № 995414

Администрирование - Защита, права, пароли

ограничение доступа на уровне записей RLS БСП типовые шаблоны ограничений

83
Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

Во всех конфигурациях, созданных на базе БСП, применяются четыре стандартных шаблона для ограничения прав доступа к объектам на уровне записей:

В данной статье я рассматриваю основные возможности использования указанных шаблонов. Некоторые, специфические варианты применения рассматривать не буду по причине их кране редкого использования. При необходимости их можно посмотреть в описании приведенном на ИТС.

Перед прочтением, рекомендую посмотреть информацию про основные принципы реализации ограничений прав на уровне записей в типовых конфигурациях.  Здесь, я описываю исключительно применение типовых шаблонов, без подробного описания подсистемы в целом.

 

Виды доступа

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

 

Шаблон #ПоЗначениям

Наиболее часто используемый шаблон. Применяется, когда необходимо ограничить доступ по каким либо реквизитам объекта.

Синтаксис шаблона:

#ПоЗначениям( "Документ.ПриобретениеТоваровУслуг","Чтение","",
"Организации","Организация",
"Склады","Склад",
"ГруппыПартнеров","Партнер",
"Подразделения","Подразделение", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )

Значения всех параметров начиная с четвертого,  это пары вид доступа – проверяемый реквизит объекта. Соответственно, шаблон поддерживает указание ограничений по 16 реквизитам объекта.

Проверяется соответствие реквизитов разрешенным значениям видов доступа для текущего пользователя. Для доступности объекта, разрешение должно быть найдено хотя бы в одной группе доступа, в которую включен пользователь, для всех указанных реквизитов одновременно. Также у пользователя должен быть доступ к данному объекту на уровне ролей.

Пример для выше приведенного ограничения доступа к документу «ПриобретениеТоваровУслуг»:

Для пользователя в настройках его групп доступа указаны следующие разрешения:

  • Разрешены все организации
  • Запрещены все склады кроме склада «Основной»
  • Ограничение по группам партнеров не используется
  • Разрешены все подразделения кроме подразделений: «Администрация», «Отдел закупок».  

Следовательно, для данного пользователя будут доступны документы по складу «Основной», с подразделениями отличными от: «Администрация», «Отдел закупок».

В шаблоне #ПоЗначеним можно использовать конструкции на языке запросов для указания жестких отборов. Для этого используется специальный вид доступа «Условие»:

"Условие", "Т.ХозяйственнаяОперация <> Значение(Перечисление.ХозяйвственныеОперации.ЗакупкаПоИмпорту) ",…   

Также, можно проверить доступ на уровне ролей, к объектам, на которые ссылаются реквизиты проверяемого объекта (это может быть владелец проверяемого объекта или любой другой реквизит). Для этого, в качестве вида доступа необходимо указать «ПравоЧтения» или «ПравоИзменения»:

#ПоЗначениям("Справочник.Файлы", "Чтение", "",
"ПравоЧтение", "Т.ВладелецФайла",…

 

Шаблон #ПоНаборамЗначений

Шаблон необходимо применять, когда набор требуемых для проверки значений может быть различным для каждого конкретного проверяемого элемента. Это могут быть журналы документов, объекты в которых проверяемые значения находятся в табличных частях или иные случаи. Во всех выше перечисленных случаях необходимо заранее подготовить и записать наборы значений доступа для каждого проверяемого объекта. Соответственно, для доступности объекта, все значения набора должны быть доступны хотя бы в одной из групп доступа пользователей.

Синтаксис шаблона:

#ПоНаборамЗначений( "Документ.УстановкаЦенНоменклатуры","Чтение","","")

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

Для использования шаблона, у каждого проверяемого вида объектов должна быть добавлена специальная табличная часть «Наборы значений доступа». В данную ТЧ перед записью объекта, помещаются значения доступа, которые должны быть доступны водной из групп доступа пользователя.

Сама же логика формирования значений видов доступа должна быть реализована в экспортной процедуре модуля объекта «ЗаполнитьНаборыЗначенийДоступа».

Пример из документа «Установка цен номенклатуры»

Для Каждого СтрокаВидыЦен Из ВидыЦен Цикл
    Строка = Таблица.Добавить();
    Строка.ЗначениеДоступа = СтрокаВидыЦен.ВидЦены;
КонецЦикла;

Все добавленные значения доступа проверяются по логическому «И». Если необходимо использовать более сложную проверку, можно заполнить дополнительный реквизит табличной части «Номер набора». Значения доступа, объединенные в разные наборы проверяются по логическому «ИЛИ».

Пример.

Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = ЗначениеДоступа1;
Строка.НомерНабора = 1;

Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = ЗначениеДоступа2;
Строка.НомерНабора = 1;


Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = ЗначениеДоступа3;
Строка.НомерНабора = 2;

Строка = Таблица.Добавить();
Строка.ЗначениеДоступа = ЗначениеДоступа4;
Строка.НомерНабора = 2;

Логика проверки будет следующей:

Логика проверки по наборам значений видов доступа

(ЗначениеДоступа1 И ЗначениеДоступа2) ИЛИ (ЗначениеДоступа3 И ЗначениеДоступа4)

Само же заполнение табличной части объекта происходит в подписке на событие переда записью объекта «ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей».

После этого в еще одной подписке на событие при записи объекта «ЗаписатьНаборыЗначенийДоступа», происходит перенос данных табличной части в специальный регистр сведений «Наборы значений доступа».  

Шаблон #ПоНаборамЗначений при проверке разрешения на запись объекта, обращается к его табличной части, так как, если это новый объект, данных в регистре сведений еще нет. При проверке разрешения на чтение объекта, шаблон обращается к регистру сведений.  

 

Шаблон #ПоЗначениямРасширенный

Шаблон #ПоЗначениям имеет одно серьезное ограничение – все заданные ограничения соединяются по логическому «И». Соответственно, нельзя указать такие условия, при которых объект будет доступен в случае доступности одного из нескольких указанных значений.

Для решения данной проблемы используется шаблон #ПоЗначениямРасширенный, который является расширенной версией шаблона #ПоЗначениям, и предоставляет возможности для применения логики «ИЛИ» для указания ограничений.

Синтаксис шаблона:

#ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "Чтение", "",
"Внутреннее Соединение Документ.ПеремещениеТоваров.Номенклатура КАК Т2 по Т.Ссылка = Т2.Ссылка", 
"",
"Организации", "Т.Организация", "И(",
"Склады", "Т.СкладОтправитель", "ИЛИ",
"Склады", "Т.СкладПолучатель", ")И",
"ГруппыНоменклатуры", "Т2.Номенклатура", "", …)

Как видно из примера, присутствуют дополнительные параметры, в которых можно задать логические связи используемых ограничений. Для указанного примера, документ будет доступен, при доступности организации и одного из двух кладов: «Склад отправитель» или «Склад получатель».

Также, в расширенном шаблоне можно указать дополнительные таблицы, которые необходимы для проверки. Допустим, можно указать табличную часть документа:

Внутреннее Соединение Документ.ПеремещениеТоваров.Номенклатура КАК Т2 по Т.Ссылка = Т2.Ссылка

Реквизиты присоединенных таблиц также можно использовать в логике проверки доступности:

"ГруппыНоменклатуры", "Т2.Номенклатура", "", …

В случае с табличной частью, объект будет доступен, если будет доступен проверяемый реквизит (в данном случае «Номенклатура») хотя бы по одной строке.

Из-за того, что в шаблоне могут применяться дополнительные таблицы, требуется обязательное указания псевдонима основной таблицы «Т».   

 

Шаблон #ПоЗначениямИНаборамРасширенный

Последний, используемый шаблон предоставляет весь функционал предыдущего шаблона, с добавлением функционала шаблона #ПоНаборамЗначений. По сути, это объединение всех возможностей предыдущих шаблонов. Данный шаблон является самым «тяжелым» с точки зрения производительности, по этому не рекомендуется его применять без действительной необходимости.

Для реализации возможностей шаблона #ПоНаборамЗначений используется специальный вид доступа «Объект», с указанием ссылки на владельца наборов значений доступа, которые необходимо проверить:

"Объект", "Т.Владелец" , "", …

В остальном, данный шаблон идентичен предыдущему шаблону.  

На этом все. Если статья Вам понравилась, не забывайте поставить звездочку J.

 

Другие мои статьи про использование механизмов БСП в типовых конфигурациях 1С

  1. Использование подсистемы БСП "Заполнение объектов"
  2. Новый подход к обмену данными EnterpriseData
  3. Пример доработки правил конвертации без использования КД 3.0

 

83

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. kalyaka 436 04.02.19 08:25 Сейчас в теме
Несмотря на то, что все это уже описано на ИТС, мне статья оказалась полезной для понимания тонкостей импользования шаблонов.

В свое время решал проблему производительности работы шаблона ПоЗначениямРасширенный, который из-за операции ИЛИ при соотношении малого количества разрешенных данных к большой выборке давал низкую производительность при выводе динамических списков. Недоразобравшись изобрел велосипед: добавил табличную часть и сделал свой запрос RLS, хотя мог бы использовать ПоНаборЗначений.

Такие обзорные статьи полезны: тот же материал, поданный по другому, позволяет увидеть тонкости, которые "замыленное" сознание не увидело в первоисточнике.
2. MSK_Step 19 04.02.19 11:32 Сейчас в теме
Чем больше таких статей +, тем грамотней будут разработки. Тем меньше на инфостарте будет статей "воды" про эффективных разработчиков
ids79; SerVer1C; +2 Ответить
3. HAMMER_59 76 05.02.19 06:47 Сейчас в теме
Голова пока забита переходом на новый релиз комплексной. Осознать статью пока не получилось, на текущий момент отложилось "БСП включает в себя настройку доступа".
Однозначно, радует, когда на Инфостарте появляются статьи с полезной информацией, а не развлекательные.
5. ids79 1070 06.02.19 09:13 Сейчас в теме
4. JaneP 10 06.02.19 07:00 Сейчас в теме
"Значения всех параметров начиная с четвертого, это пары вид доступа – проверяемый реквизит объекта. Соответственно, шаблон поддерживает указание ограничений по 16 реквизитам объекта" - можете пояснить, откуда берется цифра в 16? Это всегда так, или зависит от проверяемого объекта, или еще от чего-то? Как в других шаблонах? Простите, если вопросы "неумные", просто долго пытаюсь самостоятельно с этим разобраться и не могу.
6. ids79 1070 06.02.19 09:18 Сейчас в теме
(4)Это максимальное количество проверяемых реквизитов, которое поддерживает шаблон.
Разработчики решили, что более 16 вряд ли кто будет использовать.
По факту используется от одного до пяти.
При использовании большего количества производительность запросов будет низкой,
и лучше использовать шаблон #ПоНаборамЗначений.
Оставьте свое сообщение