В предыдущей статье мы добавляли новый вид доступа и настраивали по нему ограничение. Теперь рассмотрим частный случай настройки RLS – ограничение по группе доступа.
Допустим, нам нужно разграничить доступ к справочнику "Территории выполнения работ" по какому-то признаку. Например, одна группа пользователей должна видеть "Территории" Ростовской области, а другая Краснодарского края.
Принимаемся за дело.
Создаём новый справочник "Группы доступа территорий". В этом справочнике будут храниться элементы, характеризующие доступ : элемент "Ростовская область", элемент "Краснодарский край".
Создаём роль "ЧтениеТерриторий" с правом на чтение справочника "Территории выполнения работ". Из роли "ИзменениеУчастниковГруппДоступа" копируем шаблоны RLS "ПоЗначениям" и "ПоЗначениямРасширенный". Настраиваем использование одного из шаблонов по требуемому праву (мы выбрали "Чтение").
Дальнейшие действия с уже существующими в конфигурации объектами:
Справочник "Территории выполнения работ".
Добавляем новый реквизит с именем "ГруппаДоступа". Название должно быть именно таким, это предусмотренное системой имя. Тип реквизита – ссылка на новый справочник "Группы доступа территорий".
Определяемый тип "ЗначениеДоступа"
Добавляем в составной тип ссылки на справочники "Территории выполнения работ" и "Группы доступа территорий".
Подписка на событие "ОбновитьГруппыЗначенийДоступа"
Добавляем в список источника справочник "Территории выполнения работ".
Общий модуль "УправлениеДоступомПереопределяемый"
Добавляем в процедуры модуля несколько строк.
Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт ... //Доработка ВидДоступа = ВидыДоступа.Добавить(); ВидДоступа.Имя = "ГруппыТерриторий"; ВидДоступа.Представление = НСтр("ru = 'Группы территорий'"); ВидДоступа.ТипЗначений = Тип("СправочникСсылка.ТерриторииВыполненияРабот"); ВидДоступа.ТипГруппЗначений = Тип("СправочникСсылка.ГруппыДоступаТерриторий"); //КонецДоработки КонецПроцедуры Процедура ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование) Экспорт ... //Доработка Если ВидДоступа = "ГруппыТерриторий" Тогда Использование = Истина; КонецЕсли; //КонецДоработки КонецПроцедуры Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт Описание = Описание + " |... |//Доработка |Справочник.ТерриторииВыполненияРабот.Чтение.ГруппыТерриторий |//КонецДоработки |"; КонецПроцедуры
Далее, запускаем конфигурацию в режиме "Предприятие" с параметром запуска "ЗапуститьОбновлениеИнформационнойБазы". Также можно запустить, например с помощью внешней обработки, экспортную процедуру "УправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа".
После того как обновление завершится, создадим профиль доступа, включающий в себя роль "Чтение территорий", а также группу доступа. Настроим ограничение доступа и, наконец, назначим созданную группу доступа пользователям.