Роль в 1С определяет, какие действия, над какими объектами метаданных может выполнять пользователь, выступающий в этой роли.
Настройка ролей пользователей в системе 1С:Предприятие с помощью объекта "Роли" рассмотрена в материале "Объект 1С «Роли». Привилегированный режим 1С".
Ограничение прав на уровне записи RLS (Record Level Security) — это настройка прав пользователей в системе 1С, которая позволяет разделить права для пользователей в разрезе динамически меняющихся данных.
Самый распространенный вид настройки 1C RLS — ограничение видимости пользователя в разрезе организаций или клиентов (пользователь видит лишь «свои» данные).
Правила ограничения прав на уровне записей (RLS) в 1С:
- Каждое ограничение доступа к данным представляет собой запрос, записанный на языке запросов (с некоторыми упрощениями).
- Проверка ограничений доступа к данным выполняется для каждой записи каждой таблицы базы данных, обращение к которым происходит при выполнении запроса или в процессе манипулирования любыми объектами 1С:Предприятия.
- Для конкретной записи конкретной таблицы базы данных проверка ограничения заключается в исполнении запроса, представляющего это ограничение:
- если в результате исполнения этого запроса получается непустая выборка, то считается, что доступ к записи разрешен;
- если же выборка пустая, то доступ к записи запрещен.
- Если обращение к данной записи требует проверки нескольких ограничений (из разных полей и/или из разных ролей текущего пользователя), то проверяется каждое из ограничений. Результаты проверки ограничений, наложенных на доступ к разным полям, объединяются логической операцией "И". Результаты проверки ограничений, относящихся к разным ролям текущего пользователя, объединяются логической операцией "ИЛИ". Если результат полученного логического выражения равен "Истина", то доступ к записи разрешен. Иначе - доступ запрещен.
- Обращение по ссылке в ограничении имеет тот же смысл, что и обращение по ссылке в запросе, а именно, если ссылка указывает на несуществующую запись или имеет значение NULL, то значением поля по ссылке будет NULL.
- Если в ограничении доступа к данным операция сравнения использует поле табличной части, то результат сравнения равен "Истина", если табличная часть содержит хотя бы одну запись, для которой результат этого сравнения - "Истина". При использовании в одном сравнении двух полей разных табличных частей значения сравнения будет "Истина", если в декартовом произведении этих табличных частей найдется запись, для которой сравнение имеет значение "Истина".
Достоинство ограничения прав на уровне записей (RLS) в 1С:
- позволяет тонко разграничить права пользователей, которые могут даже не догадываться о существовании в системе других данных.
Недостатки ограничения прав на уровне записей (RLS) в 1С:
- заметное падение производительности системы (платформа при построении запроса в базу данных осложняет его дополнительными условиями);
- сложность настройки и отладки этого функционала.
Настройка ограничения прав на уровне записей 1С RLS
- Чтение
- Добавление
- Изменение
- Удаление
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
##Если &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей ##Тогда ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СоставГруппы.Ссылка КАК ГруппаПользователей ИЗ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей ПО (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей) ГДЕ (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ ИЛИ (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 КАК ПолеОтбора ИЗ РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ГДЕ НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей И ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты) И ТекущаяТаблица.#Параметр(1) ССЫЛКА Справочник.Контрагенты И НЕ ТекущаяТаблица.#Параметр(1) = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) ТОГДА ВЫБОР КОГДА 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Справочник.Контрагенты КАК Контрагенты ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = Контрагенты.ГруппаДоступаККонтрагенту И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты) И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)) И НастройкиПравДоступаПользователей.Запись = ИСТИНА ГДЕ Контрагенты.Ссылка = ТекущаяТаблица.#Параметр(1)) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ИНАЧЕ ИСТИНА КОНЕЦ = ЛОЖЬ)) И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL) ##КонецЕсли |
Приведенный выше запрос каждый раз добавляется при запросе к таблице «#ТекущаяТаблица». Специальные параметры запроса, например, "&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей", подбираются из объектов метаданных — "Параметры сеансов" (как правило, задаются при старте сессии пользователя).
Конструктор ограничения доступа к данным
Для удобства разработчика в 1С 8.3 есть специальная утилита для помощи в настройке RLS — "Конструктор ограничения доступа к данным".
Конструктор ограничений доступа к данным позволяет составить ограничения доступа на уровне записей и полей базы данных, используя средства визуального конструирования.
В конструкторе можно определить одну или несколько связанных таблиц, по которым будут задаваться ограничения.
Он вызывается из поля «Ограничение доступа»: