Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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
- Планируй иерархию доступа — определи, какие пользователи имеют доступ к каким данным
- Используй регистр сведений — для централизованного управления правами
- Тестируй с разными пользователями — убедись, что фильтрация работает
- Документируй структуру RLS — опиши в комментариях, как работает доступ
- Избегай обхода RLS — не используй служебные запросы для обхода ограничений
- Логируй события доступа — отслеживай, кто получает доступ к данным
Ограничения RLS
- RLS работает только на уровне запросов 1С
- Служебные запросы могут обойти RLS
- RLS не применяется к импорту данных напрямую в БД
- Необходимо явно указать RLS поле в каждой таблице, к которой нужно применить фильтр
RLS — это мощный инструмент для обеспечения безопасности и правильной организации многопользовательского доступа в корпоративных приложениях 1С.