Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

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

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

Ниже мы рассмотрим достоинства и недостатки данного метода и рассмотрим настройку RLS в 1С Предприятии 8.3 на примере.

1C RLS

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

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

Преимущества ограничения прав на уровне записей  в 1С

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

Недостатки 1С 8 RLS

Среди недостатков можно отметить заметное падение производительности системы. Это вызвано тем, что платформа при построении запроса в базе данных осложняет любой запрос разработчика дополнительными условиями.

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Также среди недостатков — сложность настройки этого функционала и сложность отладки. 1C выпустило очень мало материалов по настройке и работе этого функционала. Достаточно трудно найти специалиста, который грамотно настроил бы механизм.

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

Ограничение прав на уровне записи (RLS) применяется для ограничения следующих типов прав:

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

 ##Если &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей ##Тогда

ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
СоставГруппы.Ссылка КАК ГруппаПользователей
ИЗ
Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
ГДЕ
СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
ПО (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей)
ГДЕ (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ
ИЛИ (НЕ 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1 КАК ПолеОтбора
ИЗ
РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
ГДЕ
НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
И ВЫБОР
КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
И ТекущаяТаблица.#Параметр(1) ССЫЛКА Справочник.Контрагенты
И НЕ ТекущаяТаблица.#Параметр(1) = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
Справочник.Контрагенты КАК Контрагенты ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
ПО
НастройкиПравДоступаПользователей.ОбъектДоступа = Контрагенты.ГруппаДоступаККонтрагенту
И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей
ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
И НастройкиПравДоступаПользователей.Запись = ИСТИНА
ГДЕ
Контрагенты.Ссылка = ТекущаяТаблица.#Параметр(1))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ИНАЧЕ ИСТИНА
КОНЕЦ = ЛОЖЬ))
И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL)
##КонецЕсли

По сути, этот запрос каждый раз добавляется при запросе к таблице «#ТекущаяТаблица». Из чего можно представить, какую дополнительную нагрузку несет в себе механизм ограничения на уровне записи.

Как Вы видите, в запросе есть специальные параметры, например » &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей». Это параметры в РЛС подбираются из объектов метаданных — «Параметры сеансов«. Как правило, они задаются при старте сессии пользователя.

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

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

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

Другие статьи по 1С:

Пример настройки RLS:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 16 на “Настройка RLS в 1С — ограничение доступа на уровне записей
  1. На примере Организаций.
    Строка ОграничениеПоОрганизациям.Организация
    Не обнаружено поле Организация

    Я так понял, что ОграничениеПоОрганизациям в справочнике Настройка РЛС имеет тип булево? Т.к. отвечает за отображение табличной части. тогда как под ним может быть поле. Или я что то упускаю, чего не увидел в видеоматериале.

    Ответить

    • Разобрался =D

      Ответить

      • Помогите тогда и мне разобраться? Не могу понять 🙁

        Ответить

  2. В справочниках все нормально работает. А вот в списках документов показывает все документы, а где попадается ограничение — «Объект не найден….»

    Ответить

    • Вячеслав, вы разрабатывали механизм самостоятельно или использовали типовой?

      Если разрабатывали самостоятельно — нужно для документов тоже прописать условия RLS. В противном случае действительно будет «объект не найден». Очень часто встречается эта проблема в новых документах типовой из типовой конфигурации. В этом случае нужно просто скопировать условие из шаблонов «типового» документа.

      Ответить

  3. Как всё-таки правильно? Record level ? или Role level ? …. security

    Ответить

  4. Где можно скачать демо-базу из ролика?

    Ответить

  5. В УТ добавил новый документ, который имеет реквизиты Организация и Подразделение. Добавил новую роль и дал права на чтение…… этого документа. Надо ограничить доступ так, чтоб каждый пользователь мог видеть документы своего подразделения или своей организации соответственно). Я попробовал Шаблон #поЗначениям вроде ошибок не даёт, но документы вообще пропадают. Как быть?)

    Ответить

    • Помимо добавления РЛС, нужно еще в модуле «УправлениеДоступомПереопределяемый» (или как-то так) дополнить процедуру «ПриЗаполненииОграниченийДоступа» (точное название процедуры не помню), по образу и подобию с другими типовыми документами.

      Ответить

  6. Спасибо за статью, очень интересно и полезно, тестировщика только вашего жаль, что он немой). И сомнение есть, что если использовать такой справочник для приведения соответствия прав, то запрос будет сильно тормозить работу.

    Ответить

  7. Мда. Статья ни о чем. Как шаблон создать, как использовать, как правильно задать параметры? Ничего не сказано. Просто описание того, что уже есть.

    Ответить

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

Ваш адрес email не будет опубликован.