Разграничение прав в 1С: основы RLS и готовый шаблон на простом примере
Легкий старт в 1С: RLS и шаблоны прав для начинающих. Всё об основах RLS и шаблонах ограничений в 1С. Два простых примера настройки прав доступа на уровне записей для начинающих разработчиков и администраторов.
Просто о сложных вещах: разбираемся с RLS и шаблонами ограничений в 1С на пальцах
Рано или поздно каждая команда, которая начала дорабатывать типовую конфигурацию 1С, сталкивается с необходимостью настроить права доступа в 1С. Как правило после внедрения дополнительных возможностей стандартных ролей конфигурации становится недостаточно, а создание простых ролей (без RLS) позволяет лишь целиком открыть или закрыть чтение, запись документов/справочников, однако бизнес требует гибкости, например, чтобы менеджеры из филиала в Москве видели только свои документы, а менеджеры из Санкт-Петербурга — только свои.
Для этого в 1С существует механизм RLS (Record Level Security) — ограничение прав на уровне записей. Многих новичков пугает эта аббревиатура из-за сложных конструкций на языке запросов. В этой статье мы максимально просто разберем, как устроены базовые RLS и как готовые шаблоны спасают от рутины в разработке прав.
Что такое RLS и как это работает?
Представьте, что база данных 1С — это большой шкаф с документами (например, заполненный документами «Реализация товаров и услуг»).
- Обычные роли определяют, может ли пользователь вообще подойти к этому шкафу и открыть его.
- Механизм RLS — это невидимый охранник, который стоит у шкафа. Когда пользователь открывает список, охранник мгновенно перебирает все папки и показывает человеку только те, в которых в графе «Организация» указан его родной филиал. Остальные документы для пользователя просто «исчезают» — их нет ни в списках, ни в отчетах.
⚠️ Главный принцип RLS: ограничение срабатывает непосредственно при обращении к данным. Платформа 1С сама незаметно добавляет к любому запросу специальное условие ГДЕ….
Простой RLS: пишем условие «в лоб»
В самом простом варианте ограничение пишется в Конфигураторе 1С прямо на вкладке «Права» конкретной роли. Вы выбираете объект, например, справочник Организации, находите право Чтение и в поле «Ограничение доступа» пишете условие.
Приступим. Наши действия по шагам:
Шаг 1
В Конфигураторе создаем новую роль “БазоваяРоль”
Шаг 2
Для справочника Организации добавляем в право Чтение в поле «Ограничение доступа» условие: ГДЕ Ссылка В (&РазрешенныеОрганизации)
Шаг 3
В Шаге 2 мы использовали параметр запроса &РазрешенныеОрганизации. Данный параметр должен полностью совпасть по имени с Параметром сеанса - “РазрешенныеОрганизации”. Составленное нами ограничение ГДЕ предполагает, что параметр сеанса будет с типом “ФиксированныйМассив”, состоящий из элементов “СправочникСсылка.Организации”. Создадим этот параметр сеанса, “РазрешенныеОрганизации”, в нашей конфигурации.
Шаг 4
Мы добавляли роль в основную конфигурацию на Шаге 1 и туда же добавили параметр сеанса на Шаге 3. Все это можно сделать через механизм Расширений. Однако, следует помнить что:
- новые объекты, добавленные в Расширение, не видны в другом Расширении
- ошибка в Расширении отключит данное Расширение. Ошибка в основной конифигурации вызовет Исключение и остановит выполнение кода, в нашем случае выполнение запроса.
Шаг 5
В созданном на Шаге 4 Расширении в модуле сеанса напишем следующий код:
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КонецПроцедуры
Выполнение После УстановкаПараметровСеанса гарантирует нам что типовые Параметры сеанса уже инициализированы. Нам нужен всего один из них: ТекущийПользователь.
Логику отбора можно использовать любую вам подходящую. Здесь же, в примере, мы используем типовые настройки Групп доступа. Возьмем Организации, указанные в Группах доступа текущего пользователя, а также допустим, что у нас в Группах доступа всегда Значения доступа: “Все запрещены”, кроме указанных.
Такое упрощение позволит сократить код, что поможет лучше понять пример, не отвлекаясь от основной темы сатьи.
–
Это все. Простой RLS настроен. Запустим пользовательский режим “1С:Предприятие” и посмотрим что произойдет.
Платформа будет подставлять это условие каждый раз, когда пользователь с этой ролью захочет посмотреть Организации. В итоге он увидит только те Организации, которые ему выданы в Группе доступа. Помните, что в 1С реализован “мягкий” режим безопасности, т.е. если объект разрешен в любой роли, то объект разрешен!
Также крайне желательно, чтобы не было пересечений по разрешаемым объектам в разных ролях, назначенных одному пользователю. Отсутствие таких пересечений - залог производительной системы!
Минусы «простого» RLS перед шаблоном RLS:
- Если у вас 50 видов документов и для них нужно ограничить доступ по Организации, придется писать этот код 50 раз.
- Если логика изменится (например, нужно будет показывать документы ответственного + организация), придется вручную переписывать код во всех 50 местах. Чтобы не заниматься этой рутиной, в Платформе 1С предусмотрели шаблоны.
Простой шаблон RLS: пишем один раз, используем везде
Шаблон RLS — это, по сути, функция (или макрос). Вы один раз пишете сложную логику ограничения, даете ей понятное имя, а потом просто «вызываете» этот шаблон для нужных документов и справочников. В типовых конфигурациях (ERP, КА, УТ, БП), созданных на базе БСП (Библиотеки стандартных подсистем), разработчики 1С уже написали тонны готовых шаблонов. Самые популярные из них:
- #ПоЗначениям
- #ДляОбъекта
- #ДляРегистра
Как работает шаблон на практике? Вместо того чтобы городить длинный запрос для каждого документа, в поле ограничения прав вы пишете короткую строчку вызова шаблона. Платформа 1С видит решетку #, понимает, что это шаблон, находит его исходный код у Роли, подставляет туда имя вашего реквизита (в данном случае “Организация”) и сама разворачивает это в полноценное, надежное ограничение прав. Если завтра руководство решит изменить правила игры и добавить к проверке организаций еще и проверку подразделений, разработчику шаблона достаточно будет поправить код в одном месте — внутри самого шаблона. У всех документов права обновятся автоматически.
Шаг 1
Создаем новый шаблон “ШаблонБазовый” в роли “БазоваяРоль” и задаем в нем следующий Текст шаблона:
1Таблица
2ИЗ
3 #ТекущаяТаблица КАК Таблица
4 ГДЕ
5 Истина
6
7#Если "#Параметр(1)" <> "" #Тогда
8 И Таблица.#Параметр(1) В (&РазрешенныеОрганизации)
9#КонецЕсли
10
11#Если "#Параметр(2)" <> "" #Тогда
12 //Будущий блок
13#КонецЕсли
Шаг 2
Созданный шаблон на Шаге 1 назначим любому документу, где есть Организация. Например, документу ЗаказНаВнутреннееПотребление. Вызовем шаблон RLS следующей строкой кода:
1#ШаблонБазовый("Организация", "")
–
Простой шаблон RLS готов, можно запускать 1С в режиме 1С:Предприятие и смотреть полученный резудьтат.
Нужно обновить, доработать или настроить вашу 1С под новые требования?
Эксперты ООО «2А СОФТ» сертифицированы фирмой 1С по технологии «Реальная автоматизация»
- Повышаем эффективность реальных бизнес-процессов компании, используя преимущества платформы 1С:Предприятие
- Накопленный многолетний опыт работы позволяет нам решать задачи любой сложности
С чего начать новичку?
Если вы работаете в типовой конфигурации, не изобретайте велосипед.
- Используйте БСП: В режиме «1С:Предприятие» зайдите в настройки прав (Группы доступа) и настройте ограничения через стандартный интерфейс (по организациям, складам или контрагентам). БСП сама задействует нужные шаблоны «под капотом».
- Изучайте готовое: Если вам нужно создать свою роль в конфигураторе, откройте любую типовую роль и посмотрите, как там оформлены ограничения. Скопируйте вызов шаблона к себе.
- Помните про производительность: Каждое условие RLS — это дополнительная нагрузка на систему. Старайтесь делать условия максимально простыми и не накладывайте RLS на высоконагруженные регистры без реальной необходимости.
Резюме
RLS — это мощный инструмент безопасности, а шаблоны RLS — это способ держать этот инструмент в чистоте и порядке.
Не бойтесь открывать Конфигуратор: базовые ограничения строятся на стандартных запросах, а использование шаблонов экономит кучу времени и защищает от ошибок.


