Каталог решений - RLS добавление ограничения доступа к данным по произвольному справочнику через штатные механизмы

RLS добавление ограничения доступа к данным по произвольному справочнику через штатные механизмы

RLS добавление ограничения доступа к данным по произвольному справочнику через штатные механизмы

В наличии

Решал задачу ограничения доступ к объектам по справочнику «Банковские счета» штатными средствами БСП. Конфигурация КА 2.2. В остальных на БСП должно работать так же. Хотел сделать инструкцию для себя на будущее, решил поделиться.

Категория:

Описание

Итак, настраивал по инструкции //sale.itcity.ru/1c/articles/313468/, спасибо автору. Но, оказалось что сделал немного лишнего, пришлось всё переделывать с начала,  т.к. там была задача создать специальный справочник для отбора контрагентов по нему. У меня же задача немного проще — отбор уже имеющихся объектов по имеющемуся справочнику. Однако эта статья базируется на выше указанной, поэтому я буду копировать кое что из неё.

Результатом будет появление вида отбора "Банковские счета" в штатных механизмах RLS. Поехали:

Откроем доступ на изменение к объектам:
  Определяемый тип: ЗначениеДоступаСГруппамиЗначенийДоступаОбъект

  1. Открываем подписку на событие "ОбновитьГруппыЗначенийДоступа", смотрим на какой определяемый тип она ссылается, у меня это "ЗначениеДоступаСГруппамиЗначенийДоступаОбъект". Добавляем в его тип значений справочник "БанковскиеСчетаКонтрагентов". Это для того чтобы процедура создания штатных групп доступа смогла подхватить наш тип отбора.
  2. Идём в модуль "УправлениеДоступомПереопределяемый" и добавляем код в процедуры:

 

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

КонецПроцедуры


Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
    
    //...............//

    // +Наша вставка
    // указание прав объектов метаданных, на которые распространяется RLS 
    Описание = Описание + "
	|Справочник.БанковскиеСчетаКонтрагентов.Чтение.БанковскиеСчетаКонтрагентов
	|Справочник.БанковскиеСчетаОрганизаций.Чтение.БанковскиеСчетаОрганизаций
	|";
    // -Наша вставка
    
КонецПроцедуры

 

  1. Запускаем 1С:Предприятие (можно сразу с параметром "ЗапуститьОбновлениеИнформационнойБазы", чтобы виды доступа создались), смотрим какие роли дают доступ к справочнику "Банковские счета". Я пользовался обработкой //sale.itcity.ru/public/845764/.
  2. Идём в каждую роль и редактируем ограничение доступа к данным в ней так, чтобы наш новый отбор работал. Штатные отборы используют штатные шаблоны #ПоЗначениям, #ПоЗначениямРасширенный,  #ПоЗначениямИНаборамРасширенный, #ПоНаборамЗначений. Там всё весьма просто, если разобраться. Разобраться очень помогает статья //sale.itcity.ru/1c/articles/995414/, спасибо Дмитрию. У меня получилось так:

 

Права "ДобавлениеИзменениеИнформацииПоПартнерам", "ЧтениеИнформацииПоПартнерам":

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


Право "СамообслуживаниеВнешнийПользовательИзменениеБанковскихСчетов":

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


Право "УдаленныйДоступСтандартныйИнтерфейсOData":

#ПоЗначениям("Справочник.БанковскиеСчетаКонтрагентов","Чтение","",
"БанковскиеСчета","Ссылка",
"","","","","","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )

При этом в роли "УдаленныйДоступСтандартныйИнтерфейсOData" отсутствовали шаблоны, поэтому я скопировал туда шаблон "ПоЗначениям" из роли "ПолныеПрава" и создал новое ограничение доступа к данным для "<прочие поля>"

  1. Запускаем 1С:Предприятие с параметром "ЗапуститьОбновлениеИнформационнойБазы", если ранее параметр не ставили. Если ставили — убираем. Идем НСИ и администрирование -> Администрирование -> Настройка пользователей и прав, выбираем нужный профиль, идём на вкладку "Ограничение доступа", добавляем ограничение по банковским счетам.
  2. Создаём группу доступа, указываем наш профиль, добавляем туда пользователей и проверяем что доступ к справочнику "Банковские счета" работает корректно.
  3. Самое нудное и неприятное. Проделываем пункт 4 для каждого объекта, к которому должна быть возможность ограничивать доступ по банковским счетам.

 

Для выполнения п. 7 планирую написать обработку, которая поможет автоматизировать эту нужную процедуру. Т.к. править роли программно нельзя, предположительно, обработка будет не на 1С и будет работать с базой данных или конфигурационными файлами. С радостью приму советы по этому поводу, всем спасибо!

has been added to your cart:
Оформление заказа