Настройка прав на уровне записей (RLS, Row Level Security)

Роль в 1С определяет, какие действия, над какими объектами метаданных может выполнять пользователь, выступающий в этой роли.

Настройка ролей пользователей в системе 1С:Предприятие с помощью объекта «Роли» рассмотрена в материале «Объект 1С «Роли». Привилегированный режим 1С».

Ограничение прав на уровне записи RLS (Record Level Security) — это настройка прав пользователей в системе 1С, которая позволяет разделить права для пользователей в разрезе динамически меняющихся данных.

Самый распространенный вид настройки 1C RLS — ограничение видимости пользователя в разрезе организаций или клиентов (пользователь видит лишь «свои» данные).

Правила ограничения прав на уровне записей (RLS)  в 1С:

  1. Каждое ограничение доступа к данным представляет собой запрос, записанный на языке запросов (с некоторыми упрощениями).
  2. Проверка ограничений доступа к данным выполняется для каждой записи каждой таблицы базы данных, обращение к которым происходит при выполнении запроса или в процессе манипулирования любыми объектами 1С:Предприятия.
  3. Для конкретной записи конкретной таблицы базы данных проверка ограничения заключается в исполнении запроса, представляющего это ограничение:
    • если в результате исполнения этого запроса получается непустая выборка, то считается, что доступ к записи разрешен;
    • если же выборка пустая, то доступ к записи запрещен.
  4. Если обращение к данной записи требует проверки нескольких ограничений (из разных полей и/или из разных ролей текущего пользователя), то проверяется каждое из ограничений. Результаты проверки ограничений, наложенных на доступ к разным полям, объединяются логической операцией «И». Результаты проверки ограничений, относящихся к разным ролям текущего пользователя, объединяются логической операцией «ИЛИ». Если результат полученного логического выражения равен «Истина», то доступ к записи разрешен. Иначе — доступ запрещен.
  5. Обращение по ссылке в ограничении имеет тот же смысл, что и обращение по ссылке в запросе, а именно, если ссылка указывает на несуществующую запись или имеет значение NULL, то значением поля по ссылке будет NULL.
  6. Если в ограничении доступа к данным операция сравнения использует поле табличной части, то результат сравнения равен «Истина», если  табличная часть содержит хотя бы одну запись, для которой результат этого сравнения — «Истина». При использовании в одном сравнении двух полей разных табличных частей значения сравнения будет «Истина», если в декартовом произведении этих табличных частей найдется запись, для которой сравнение имеет значение «Истина».

Достоинство ограничения прав на уровне записей (RLS)  в 1С:

  • позволяет тонко разграничить права пользователей, которые могут даже не догадываться о существовании в системе других данных.

Недостатки ограничения прав на уровне записей (RLS)  в 1С:

  • заметное падение производительности системы (платформа при построении запроса в базу данных осложняет его дополнительными условиями);
  • сложность настройки и отладки этого функционала.

Настройка ограничения прав на уровне записей 1С RLS

Внешне настройка RLS (прав на уровне записей) похожа на составление простого запроса 1С и применяется для ограничения следующих типов прав:
  • Чтение
  • Добавление
  • Изменение
  • Удаление
Пример ограничения видимости дoкумента 1С

Пример (отсюда) шаблона для ограничения доступа видимости документов по клиенту из шапки документа:

Приведенный выше запрос каждый раз добавляется при запросе к таблице «#ТекущаяТаблица». Специальные параметры запроса, например, «&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей», подбираются из объектов метаданных — «Параметры сеансов» (как правило, задаются при старте сессии пользователя).

[свернуть]

Конструктор ограничения доступа к данным

Для удобства разработчика в 1С 8.3 есть специальная утилита для помощи в настройке RLS — «Конструктор ограничения доступа к данным».

Конструктор ограничений доступа к данным позволяет составить ограничения доступа на уровне записей и полей базы данных, используя средства визуального конструирования.

В конструкторе можно определить одну или несколько связанных таблиц, по которым будут задаваться ограничения.

Он вызывается из поля «Ограничение доступа»:

Конструктор ограничения доступа к данным

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.