Разграничение доступа к данным в «1С:Предприятии 8» стало ещё точнее с появлением Row Level Security (RLS) — механизма, который позволяет управлять правами на уровне отдельных записей, а не только на уровне объекта целиком. Впервые RLS появился в платформе 8.3.18 и с тех пор активно развивается.
Что такое RLS и зачем он нужен
Классические роли в 1С позволяют разрешить или запретить действия (чтение, добавление, изменение, удаление) целого объекта конфигурации (справочника, документа и т.д.). Однако часто требуется, чтобы:
- Менеджер видел только свои договоры;
- Складской работник имел доступ только к тем складским документам, которые касаются его склада;
- Филиалы не могли видеть данные друг друга.
RLS решает эти задачи, фильтруя строки на уровне СУБД: пользователь просто не получает в выборке записи, к которым у него нет доступа. Это:
- безопасно (фильтр не обходится через интерфейс);
- безопасно для производительности (фильтр применяется на стороне сервера);
- прозрачно для прикладного кода.
Где задаются правила RLS
В конфигураторе правила описываются в административных ролях, на вкладке «Доступ к данным» → «Уровень записей».
Ключевые элементы интерфейса
- Таблица объектов. Здесь перечисляются метаданные (справочники, документы, регистры), к которым будут применяться правила.
- Условия RLS. Для каждого объекта можно задать:
- Фильтр по реквизиту. Например, «
Склад = &ТекущийСкладПользователя». - Фильтр по связанным объектам. «Договор доступен, если контрагент = &КонтрагентПользователя».
- Сложные выражения. С применением булевой логики, функций
ВЫБРАТЬ,ПРИСУТСТВУЕТи др.
- Фильтр по реквизиту. Например, «
- Контекстные параметры. Значения
&ТекущийСкладПользователя,&Филиали т.д. автоматически подставляются из констант или справочника «Пользователи».
Как работает RLS пошагово
Шаг 1. Создаём административную роль
В конфигураторе: Администрирование → Роли → Создать административную роль.
Шаг 2. Задаём правила доступа
На вкладке Уровень записей выбираем объект «Справочник.ДоговорыКонтрагентов» и прописываем условие:
Владелец = &Пользователь
Таким образом пользователь увидит договоры, владельцем которых он является.
Шаг 3. Привязываем роль к пользователю
В Конфигураторе → Администрирование → Пользователи или в Журнале регистрации → Пользователи и права назначаем созданную роль.
Шаг 4. Проверяем
Запускаем 1С в режиме «Тонкий клиент» → список договоров автоматически фильтруется.
Типичные сценарии использования
| Задача | Пример условия RLS |
|---|---|
| Филиалы не видят документы друг друга | Филиал = &ФилиалПользователя |
| Менеджер видит только свои заказы | Ответственный = &Пользователь |
| Доступ к регистру накопления «ОстаткиТоваров» только по своему складу | Склад = &ТекущийСкладПользователя |
Ограничения и особенности
- Версия платформы. RLS требует 8.3.18 и выше. В более ранних версиях механизм не работает.
- Сервер 1С. Правила применяются только на сервере. При работе в файловом варианте RLS недоступен.
- Производительность. Сложные выражения или связи по нескольким таблицам могут замедлять запросы. Используйте индексы.
- Контекстные параметры. Необходимо корректно заполнять реквизиты пользователя (филиал, склад, контрагент).
- Отладка. Для проверки используйте Журнал регистрации → Пользователи и права → Проверка прав RLS.
Мини-чек-лист внедрения RLS
- Обновите платформу до 8.3.18 или новее.
- Определите, по каким реквизитам нужно фильтровать записи.
- Создайте административную роль и настройте правила.
- Добавьте недостающие реквизиты в справочник «Пользователи».
- Протестируйте на тестовой базе, измерив скорость отчётов.
- Документируйте правила для будущих администраторов.
Row Level Security в 1С — мощный инструмент точного разграничения доступа. Он позволяет:
- сократить количество специализированных конфигураций;
- повысить информационную безопасность;
- облегчить сопровождение: одна база вместо множества «филиальных» копий.
Главное — грамотно продумать модель доступа, протестировать производительность и документировать все правила.