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