← Назад к вопросам

Что такое RLS в 1С и как его настроить?

3.0 Senior🔥 141 комментариев
#RLS и права

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

RLS (Row-Level Security) в 1С

RLS — это механизм безопасности в 1С:Предприятие 8, который позволяет ограничить доступ пользователей к конкретным строкам данных на уровне БД, основываясь на правах пользователя и значениях записей.

Что такое RLS?

RLS (Row-Level Security, "Безопасность на уровне строк") — это автоматическое ограничение данных, которые видит конкретный пользователь при выполнении запросов и работе с документами:

// Без RLS: пользователь видит ВСЕ счета-фактуры
// С RLS: пользователь видит только счета его отделения

Процедура ПолучитьСчета()
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   СчётФактура.Ссылка,
        |   СчётФактура.Номер,
        |   СчётФактура.Отделение
        |ИЗ
        |   Документ.СчётФактура Как СчётФактура"
    );
    
    // С RLS этот запрос вернёт только разрешённые строки!
    Результат = Запрос.Выполнить();
КонецПроцедуры

Компоненты RLS

1. Таблица-справочник для RLS

Справочник, который содержит объекты доступа (филиалы, отделения, регионы):

// Справочник "Отделения"
// Структура:
// - Наименование (например, "Москва", "СПб", "Казань")
// - РазрешитьПолныйДоступ (Булево)

2. Таблица данных с RLS полем

Таблица содержит поле-справочник, которое связано с RLS:

// Документ "СчётФактура"
// Структура:
// - Номер
// - Дата
// - Отделение (СправочникСсылка.Отделения) ← RLS ПОЛЕ
// - Сумма

3. Регистр сведений для RLS

Регистр содержит маппинг пользователей и объектов доступа:

// Регистр сведений "РазрешённыеОтделения"
// Ресурсы: Разрешено (Булево)
// Реквизиты: Пользователь, Отделение

// Записи:
// Пользователь: Иван, Отделение: Москва, Разрешено: Истина
// Пользователь: Иван, Отделение: СПб, Разрешено: Ложь
// Пользователь: Петр, Отделение: СПб, Разрешено: Истина

Настройка RLS в конфигураторе

Шаг 1: Создай справочник для объектов доступа

1. Справочник "Отделения"
   - Реквизиты:
     - Наименование (Строка, не пусто)
     - РазрешитьПолныйДоступ (Булево)

Шаг 2: Создай регистр сведений для прав RLS

1. Регистр сведений "РазрешённыеОтделения"
   - Периодичность: Не периодичный
   - Реквизиты:
     - Пользователь (СправочникСсылка.Пользователи)
     - Отделение (СправочникСсылка.Отделения)
   - Ресурсы:
     - Разрешено (Булево, значение по умолчанию: Истина)

Шаг 3: Добавь RLS поле в таблицу

В документе или справочнике:

1. Документ "СчётФактура" (или любой объект)
   - Реквизиты:
     - Отделение (СправочникСсылка.Отделения) ← RLS ПОЛЕ
   - В свойствах этого поля:
     - RLS (отметить галочку)
     - Справочник RLS: Отделения
     - Регистр RLS: РазрешённыеОтделения

Как работает RLS

Процесс проверки прав:

1. Пользователь выполняет запрос к документам
2. Платформа ловит запрос
3. Платформа смотрит в регистр РазрешённыеОтделения
4. Находит строки текущего пользователя с Разрешено = Истина
5. Автоматически добавляет фильтр WHERE Отделение IN (разрешённые)
6. Возвращает только разрешённые строки

Визуально:

Запрос пользователя:
  SELECT * FROM СчётФактура

После RLS (для пользователя Иван):
  SELECT * FROM СчётФактура
  WHERE Отделение IN (
    SELECT Отделение FROM РазрешённыеОтделения
    WHERE Пользователь = текущий_пользователь
      AND Разрешено = Истина
  )

Практический пример RLS

Сценарий: сеть магазинов с региональными менеджерами

Процедура ИнициализироватьRLS()
    // 1. Создаём отделения
    МоскваОтделение = Справочники.Отделения.СоздатьЭлемент();
    МоскваОтделение.Наименование = "Москва";
    МоскваОтделение.РазрешитьПолныйДоступ = Ложь;
    МоскваОтделение.Записать();
    
    СПбОтделение = Справочники.Отделения.СоздатьЭлемент();
    СПбОтделение.Наименование = "Санкт-Петербург";
    СПбОтделение.РазрешитьПолныйДоступ = Ложь;
    СПбОтделение.Записать();
    
    // 2. Устанавливаем права доступа
    // Иван имеет доступ только к московским документам
    НовоеПраво = РегистрыСведений.РазрешённыеОтделения.СоздатьНаборЗаписей();
    НовоеПраво.Отбор.Пользователь.Установить(Пользователи.Иван);
    НовоеПраво.Прочитать();
    
    ЗаписьПрава = НовоеПраво.Добавить();
    ЗаписьПрава.Пользователь = Пользователи.Иван;
    ЗаписьПрава.Отделение = МоскваОтделение;
    ЗаписьПрава.Разрешено = Истина;
    
    НовоеПраво.Записать();
    
    // 3. При выполнении запроса Иваном
    // он увидит только документы с Отделение = Москва
КонецПроцедуры

// Практический запрос
Процедура ПолучитьСчета()
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   СчётФактура.Ссылка,
        |   СчётФактура.Номер,
        |   СчётФактура.Отделение.Наименование Как ОтделениеНаименование,
        |   СчётФактура.Сумма
        |ИЗ
        |   Документ.СчётФактура Как СчётФактура
        |ПОРЯДОК ПО
        |   СчётФактура.Дата УБЫВ"
    );
    
    Результат = Запрос.Выполнить().Выбрать();
    
    // Если пользователь — Иван, он увидит только счета с Отделением = Москва
    // Если пользователь — Администратор со всеми правами, он увидит все счета
    // Если пользователь — без прав, он не увидит ничего
    
    Сообщение("Всего счетов: " + Результат.Количество());
КонецПроцедуры

Проверка прав RLS

Как узнать, какие данные видит пользователь?

Процедура ПроверитьПраваRLS()
    ТекущийПользователь = ПользователиИнформационнойБазы.Текущий().Пользователь;
    
    // Получаем разрешённые отделения для текущего пользователя
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   РазрешённыеОтделения.Отделение,
        |   РазрешённыеОтделения.Отделение.Наименование Как Наименование
        |ИЗ
        |   РегистрСведений.РазрешённыеОтделения Как РазрешённыеОтделения
        |ГДЕ
        |   РазрешённыеОтделения.Пользователь = &Пользователь
        |   И РазрешённыеОтделения.Разрешено = ИСТИНА"
    );
    Запрос.УстановитьПараметр("Пользователь", ТекущийПользователь);
    
    Результат = Запрос.Выполнить().Выбрать();
    
    Сообщение("Разрешённые отделения для " + ТекущийПользователь + ":");
    Пока Результат.Следующий() Цикл
        Сообщение("  - " + Результат.Наименование);
    КонецЦикла;
КонецПроцедуры

Полный доступ (Bypass RLS)

Администратор может видеть всё:

// Справочник "Отделения"
// Поле РазрешитьПолныйДоступ = Истина означает,
// что пользователи с этим отделением видят ВСЕ данные

// ИЛИ: пользователь с правом "Администрирование" видит все данные независимо от RLS

Лучшие практики RLS

  1. Планируй иерархию доступа — определи, какие пользователи имеют доступ к каким данным
  2. Используй регистр сведений — для централизованного управления правами
  3. Тестируй с разными пользователями — убедись, что фильтрация работает
  4. Документируй структуру RLS — опиши в комментариях, как работает доступ
  5. Избегай обхода RLS — не используй служебные запросы для обхода ограничений
  6. Логируй события доступа — отслеживай, кто получает доступ к данным

Ограничения RLS

  • RLS работает только на уровне запросов 1С
  • Служебные запросы могут обойти RLS
  • RLS не применяется к импорту данных напрямую в БД
  • Необходимо явно указать RLS поле в каждой таблице, к которой нужно применить фильтр

RLS — это мощный инструмент для обеспечения безопасности и правильной организации многопользовательского доступа в корпоративных приложениях 1С.

Что такое RLS в 1С и как его настроить? | PrepBro