Как RLS взаимодействует с временными таблицами и виртуальными таблицами
1️⃣ Как кратко ответить
RLS (Row-Level Security) в 1С не применяется к временным таблицам, так как они создаются и управляются в контексте текущей сессии пользователя. Виртуальные таблицы, являясь частью механизма запросов, могут быть подвержены RLS, если они используют данные из таблиц, к которым применены правила безопасности.
2️⃣ Подробное объяснение темы
RLS (Row-Level Security) — это механизм, который позволяет ограничивать доступ к строкам данных в таблицах на уровне базы данных. В 1С это реализуется через правила безопасности, которые определяют, какие строки данных доступны конкретному пользователю или группе пользователей.
Временные таблицы
Временные таблицы в 1С создаются в контексте выполнения конкретного запроса или обработки и существуют только в течение сессии пользователя. Они не сохраняются в базе данных и не имеют постоянного хранилища. Поскольку временные таблицы создаются и управляются в рамках текущей сессии, RLS к ним не применяется. Это связано с тем, что временные таблицы не являются частью постоянной структуры данных, к которой можно было бы применить правила безопасности.
Пример создания временной таблицы:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Количество КАК Количество
|ПОМЕСТИТЬ ВременнаяТаблица
|ИЗ
| Документ.ЗаказПокупателя.Товары КАК Товары
|ГДЕ
| Товары.Количество > 0";
Запрос.Выполнить();
- Запрос.Текст: Определяет текст запроса, который будет выполнен.
- ПОМЕСТИТЬ ВременнаяТаблица: Указывает, что результат запроса будет помещен во временную таблицу.
- Запрос.Выполнить(): Выполняет запрос, создавая временную таблицу в памяти.
Виртуальные таблицы
Виртуальные таблицы в 1С — это специальные таблицы, которые не хранят данные напрямую, а формируют их на основе других данных в реальном времени. Они часто используются для представления агрегированных данных или для упрощения сложных запросов.
RLS может применяться к виртуальным таблицам, если они используют данные из таблиц, к которым применены правила безопасности. Это происходит потому, что виртуальные таблицы, по сути, являются представлениями данных, и если эти данные подлежат ограничениям, то и виртуальные таблицы будут подчиняться тем же правилам.
Пример использования виртуальной таблицы:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Продажи.Номенклатура КАК Номенклатура,
| СУММА(Продажи.Количество) КАК ОбщийОбъем
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
|СГРУППИРОВАТЬ ПО
| Продажи.Номенклатура";
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Результат = Запрос.Выполнить().Выбрать();
- РегистрНакопления.Продажи: Используется как источник данных для виртуальной таблицы.
- СУММА(Продажи.Количество): Агрегатная функция, которая суммирует количество продаж.
- СГРУППИРОВАТЬ ПО Продажи.Номенклатура: Группирует данные по номенклатуре.
Если к регистру накопления "Продажи" применены правила безопасности, то и виртуальная таблица, использующая его данные, будет подчиняться этим правилам. Это позволяет обеспечить безопасность данных на уровне строк даже в сложных отчетах и аналитических запросах.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться