В предыдущей статье мы добавляли новый вид доступа и настраивали по нему ограничение. Теперь рассмотрим частный случай настройки RLS – ограничение по группе доступа.

Допустим, нам нужно разграничить доступ к справочнику "Территории выполнения работ" по какому-то признаку. Например, одна группа пользователей должна видеть "Территории" Ростовской области, а другая Краснодарского края.

Принимаемся за дело.

Создаём новый справочник "Группы доступа территорий". В этом справочнике будут храниться элементы, характеризующие доступ : элемент "Ростовская область", элемент "Краснодарский край".

Создаём роль "ЧтениеТерриторий" с правом на чтение справочника "Территории выполнения работ". Из роли "ИзменениеУчастниковГруппДоступа" копируем шаблоны RLS "ПоЗначениям" и "ПоЗначениямРасширенный". Настраиваем использование одного из шаблонов по требуемому праву (мы выбрали "Чтение").

1С Система управления доступом, RLS

Дальнейшие действия с уже существующими в конфигурации объектами:

Справочник "Территории выполнения работ".
Добавляем новый реквизит с именем "ГруппаДоступа". Название должно быть именно таким, это предусмотренное системой имя. Тип реквизита – ссылка на новый справочник "Группы доступа территорий".

Определяемый тип "ЗначениеДоступа"
Добавляем в составной тип ссылки на справочники "Территории выполнения работ" и "Группы доступа территорий".

Подписка на событие "ОбновитьГруппыЗначенийДоступа"
Добавляем в список источника справочник "Территории выполнения работ".

Общий модуль "УправлениеДоступомПереопределяемый"
Добавляем в процедуры модуля несколько строк.

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

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


Процедура ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование) Экспорт
	...
	//Доработка
    Если ВидДоступа = "ГруппыТерриторий" Тогда
        Использование = Истина;
    КонецЕсли;
    //КонецДоработки 

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


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

	Описание = Описание + "
	|...
	|//Доработка
	|Справочник.ТерриторииВыполненияРабот.Чтение.ГруппыТерриторий
	|//КонецДоработки
	|";

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

Далее, запускаем конфигурацию в режиме "Предприятие" с параметром запуска "ЗапуститьОбновлениеИнформационнойБазы". Также можно запустить, например с помощью внешней обработки, экспортную процедуру "УправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа".

После того как обновление завершится, создадим профиль доступа, включающий в себя роль "Чтение территорий", а также группу доступа. Настроим ограничение доступа и, наконец, назначим созданную группу доступа пользователям.