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

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

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

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

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

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

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

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

 

Виды доступа

Под видами доступа в системе понимается набор различных видов объектов конфигурации, по объектам которых предполагается выполнять ограничение доступа на уровне записей. В типовых конфигурациях присутствует достаточно широкий набор видов доступа, например: «Пользователи», «Организации», «Склады», «Кассы», «ГруппыКонтрагентов», «Группы номенклатуры» и прочие. При необходимости можно достаточно легко добавить дополнительный, собственный вид доступа. А том как это сделать, подробно описано в этой статье. Статья написана для устаревшей версии БСП 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. EnterpriseData - часть 2. Процесс выгрузки данных

  4. Пример доработки правил конвертации без использования КД 3.0

 

155

См. также

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

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

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

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

После прочтения ИТС, лучше почитать "справку" в комментариях к самим шаблонам, тогда становиться более понятно

// ПоНаборамЗначений(Таблица, -, Модификатор, ВладелецНаборов).
// № параметра: 1, 2, 3, 4.
// Читается так: "ограничение доступа по наборам значений".
// Параметры:
// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг".
// Модификатор - изменяет шаблон.
// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает
// безусловно выбирать группы иерархического справочника.
// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений,
// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную
// проверку, при которой вариант настройки вида доступа в группах доступа
// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется".
// Если этого модификатора нет, тогда результат проверки Истина, что приводит
// к итоговому результату Истина, если "Все разрешены, без запрещенных"
// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям).
// Модификатор имеет смысл только при проверке наборов значений доступа.
// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам",
// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ".
// Других модификаторов в этой версии шаблона не предусмотрено.
// ВладелецНаборов - имя поля, содержащего ссылку на объект-владелец
// наборов значений доступа в регистре сведений НаборыЗначенийДоступа.
// Если имя поля не задано, считается, что проверяется сам объект-владелец
// наборов значений доступа, который имеет табличную часть <Таблица>.НаборыЗначенийДоступа.
// Эта табличная часть применяется, когда Право = "Изменение".
// Табличная часть точно такая, как РегистрСведений.НаборыЗначенийДоступа
// без измерения Объект и реквизитов.
// Для журналов документов нужно указать "Ссылка".
//
// Пример1: ПоНаборамЗначений("Документ.КорректировкаДенежныхСредств", "", "", "")
// Пример2: ПоНаборамЗначений("Документ.ПоступлениеТоваровИУслуг", "", "", "")
// Пример3: ПоНаборамЗначений("ЖурналДокументов.СкладскиеДокументы", "", "", "Ссылка")
// Пример4: ПоНаборамЗначений("Справочник.ВложенияЭлектронныхПисем", "", "", "Владелец")
8. ids79 3726 15.03.19 07:14 Сейчас в теме
(7)А на мой взгляд, в комментарии к шаблону менее понятно, чем в моем описании.
Хотя наверно для кого как...
Чтож, напишите лучше.
Olga_aku; +1 Ответить
9. muskul 31.05.19 04:09 Сейчас в теме
Мечта многих клиентов РЛС по номенклатуре что бы ее видно не было.
Ну и типовая настройка через группы доступа или профиль тоже не всегда удобна
Оставьте свое сообщение