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