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



RLS в 1C - ограничения доступа на уровне записей

Классическая задача: открыть пользователю доступ к какому-либо объекту, но не ко всем элементам / документам, а только к некоторым.

Например, чтобы менеджер видел отчеты только по своим клиентам.

Или это может быть ограничение “все, кроме некоторых”.
Или ограничение не на справочники/документы, а на данные регистров

Например, чтобы пользователи ни одним отчетом не могли вытащить данные по выплатам партнерам.

По сути – это тонкая и очень гибкая настройка “что можно видеть этому пользователю, а о чем ему и не нужно догадываться”.

Почему именно RLS?

На большинстве внедрений требуется для разных пользователей установить различные уровни доступа к информации в базе.

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

В конфигурациях за возможные права доступа к данным отвечают специальные объекты метаданных – роли. Каждому пользователю информационной базы назначается одна или несколько ролей. Они определяют, возможны ли операции с конкретными объектами метаданных (чтение, запись, проведение и т.д.).

Но это не все.

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

Только при помощи ролей решить такую задачу нельзя – для этого реализован механизм ограничения доступа на уровне записей (RLS).

Ограничения представляют собой условия, при выполнении которых действие над данными (чтение, запись и т.д.) будет разрешено. – так можно ограничить доступ не к объекту в целом, а только к части его данных.

Про RLS – более подробно: 8 видео и PDF

Поскольку это распространенная задача администрирования 1С – предлагаем посмотреть более детальные материалы:


PDF с вводной информацией.

21 страница, которые нужно прочесть сначала.

Видео 01:

01. Ограничение доступа к данным при помощи ролей

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

В этом видео рассказывается, как ограничивается доступ к данным при помощи ролей. Уточняется, что роли ограничивают доступ к виду объектов информационной базы (отдельный справочник, но не конкретные элементы справочника).

Видео 02:

02. Ограничение доступа на уровне записей (RLS)

Ограничение доступа на уровне записей (RLS)

В этом видео рассказывается о механизме ограничений доступа на уровне записей (RLS), когда можно настроить доступ не ко всему справочнику в целом, а к отдельным его элементам, в зависимости от хранящихся в информационной базе данных. Подобные ограничения прописываются в ролях.

Видео 03:

03. Реализация ограничения доступа на уровне записей для справочника Контрагенты

Реализация ограничения доступа на уровне записей для справочника Контрагенты

В этом видео рассказывается, как в демонстрационной конфигурации «Управляемое приложение» настроить доступ менеджеров только к собственным контрагентам, закрепленным за ними.

Видео 04:

04. Принцип работы ограничений доступа на уровне записей на низком уровне

Принцип работы ограничений доступа на уровне записей на низком уровне

В этом видео рассказывается, как платформа трансформирует запросы, передаваемые для выполнения на сервер СУБД, при наличии ограничений доступа на уровне записей.

Видео 05:

05. Совместное применение нескольких ограничений доступа на уровне записей

Совместное применение нескольких ограничений доступа на уровне записей

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

Видео 06:

06. Наложение ограничений методом ВСЕ

Наложение ограничений методом ВСЕ

В этом видео описывается первый способ наложения ограничений на уровне записей – метод ВСЕ. При этом, если в выборку попадают записи, к которым доступ ограничен, будет выведено сообщение об ошибке.

Видео 07:

07. Наложение ограничений методом РАЗРЕШЕННЫЕ

Наложение ограничений методом РАЗРЕШЕННЫЕ

В этом видео описывается первый способ наложения ограничений на уровне записей – метод РАЗРЕШЕННЫЕ. При этом в выборку попадут только те записи, к которым у пользователя есть права доступа.

Видео 08:

08. Исправление ошибки, возникающей из-за наложения прав доступа на уровне записей

Исправление ошибки, возникающей из-за наложения прав доступа на уровне записей

В этом видео рассматривается, как при помощи ключевого слова РАЗРЕШЕННЫЕ исправить ошибку, возникающую под пользователем с ограниченными правами.

Не пропустите – все сразу и в полном объеме!

Этот курс позволит решать ВСЕ задачи по развертыванию и поддержке информационных систем на 1С.

Вот несколько тем из курса:

  • Установка и обновление платформы «1С:Предприятие 8» – ручная и автоматическая, под Windows и Linux
  • Автоматический запуск для выполнения регламентных операций
  • Обновление конфигураций из пользовательского режима
  • Обновление нетиповых конфигураций. Как избежать проблем при обновлении измененных типовых конфигураций
  • Создание собственных cfu-файлов поставки
  • Инструменты БСП: внешние формы, обработки заполнения документов и т.п.
  • Использование бесплатной СУБД PostgreSQL
  • Установка и запуск кластера серверов 1С:Предприятие 8
  • Утилита администрирования для настройки кластера и рабочих серверов
  • Настройка RLS на примере УПП 1.3 и ERP 2
  • Что делать, если данные в ИБ повреждены
  • Настройка обменов данными между конфигурациями
  • Организация групповой разработки
  • Настройка и использование аппаратных ключей защиты
  • Программные лицензии 1С: установка и привязка к внешнему оборудованию
Этот курс актуален для всех, кто внедряет или поддерживает 1С.

Даже на 3-5 пользователей. Тем более – если их хотя бы десяток…

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

И лучше это сразу делать правильно.

Чтобы потом не было “…! Ну что за …! Твою же …!” – и прочих выражений сожаления :)

Кроме того, у нас появился специализированный курс – Настройка и доработка прав доступа, профилей пользователей и RLS в типовых конфигурациях УТ 11.4 (11.3), КА 2.4 (2.2) и 1C:ERP 2.4 (2.2).

Комментарии / обсуждение (145):

  1. Павел

    Приветствую Василий, есть задача в ут 10.3 ограничить доступ пользователей на доп свойства справочника контрагентов сейчас RLS используется для доступа к контрагентам не могу сообразить на какой объект лучше написать правило ограничения на регистрсведений.ЗначенияСвойствОбъектов или на планВидовХарактеристик.СвойстваОбъектов?

    • Василий Ханевич

      Добрый день!
      Нужно ограничивать оба объекта – и ПВХ СвойстваОбъектов, и регистр сведений ЗначенияСвойствОбъектов.
      Потому что пользователю с ограниченными правами нужно видеть только выборочные, разрешенные элементы ПВХ, а также записи в регистре только по этим элементам ПВХ и по разрешенным контрагентам.

      • Павел

        Приветствую.
        Хотел интегрировать в стандартный механизм ограничения по контрагентам ут10.3 не могу разобраться синтаксисом у вас в лекции пример ограничения виде запроса а в Ут ввиде таблицы: #таблицаОсновногоВидаОбъектаДоступа(“Контрагенты”,”ГруппыдоступакКонтрагенту”,”ИлиЭтоГруппа”) хотел уточнить как лучще поступить делать ограничичение для свойств отдельным условием (запросом)или возможно дописать чтобы они попадали в эту таблицу?

        • Василий Ханевич

          Добрый день!
          Конструкция, начинающаяся с #, – это шаблон ограничения доступа. Увидеть шаблоны в форме роли на закладке Шаблоны ограничений:
          Роли
          Шаблон может содержать параметры, которые выделяются в его тексте при помощи символа #.
          Платформа подставляет значения параметров в шаблон ограничения. Так формируется готовый текст ограничения доступа, который и будет использоваться при работе.

          В Вашем случае может быть два варианта решения:
          1. Вы не используете сложные типовые шаблоны, самостоятельно прописываете собственное ограничение при помощи простого запроса.
          2. Вы анализируете существующие в типовой конфигурации шаблоны, подбираете подходящий, используете его. Можно поискать в конфигурации похожие примеры в ролях, взять их в качестве образца.

  2. Роман

    Добрый день. Имеется такая задача, есть ветка номенклатуры, которая привязана к магазину, и всю номенклатуру в этой группе и подгруппах необходимо разрешить изменять только 1-2м пользователям.
    У соответствующей роли можно убрать галку прав на чтение, но как сделать, что бы эти правила распространялись только на группу магазин, а не блокировали абсолютно все.
    Спасибо за помощь и видео, очень интересно!

    • Василий Ханевич

      Добрый день!
      Предлагаю сделать регистр сведений РазрешеннаяНоменклатура, куда записывать все номенклатуры, которые можно изменять указанным пользователям. Например, в регламентном задании выбираем номенклатуры из определенных групп, записываем в регистр. Получается что-то похожее на состав сегментов номенклатуры из УТ 11.
      Затем в роли для справочника Номенклатура для права Изменение прописать ограничение доступа, например, вот так:

      Номенклатура ГДЕ Номенклатура.Ссылка В
                  (ВЫБРАТЬ
                      РазрешеннаяНоменклатура.Номенклатура КАК Номенклатура
                  ИЗ
                      РегистрСведений.РазрешеннаяНоменклатура КАК РазрешеннаяНоменклатура)

      Т.е. пользователю с этой ролью можно изменять только те элементы справочника Номенклатура, которые содержатся в указанном регистре.

      • Роман

        Спасибо за совет, сделал как вы сказали, все работает! Единственное, не смог самостоятельно доработать. Не поможете довести до ума?)

        В РегистреСведений в Измерения добавил в Данные свойство “СправочникСсылка.Номенклатура” ЗапрещеннаяГруппаНоменклатуры, установил ВыборГрупп, создал форму и выставил тип “ВыборГрупп”.
        Это все работает, выбираются только группы, как и нужно.

        У меня УТ 10.3, иду в Операции – Регистр Сведений – выбираю свой. Там добавляю группы, все ОК!

        Единственное, не понимаю, как добить условие в Роли ограничение доступа Изменение. Запрет редактирование всего, что есть в РегистреСведений, по группам. Разматывать всю иерархию не нужно, достаточно только 1 погружение, мне не влом добавить все подгруппы. Просто как-то нужно правильно свести код:

        Выборка = Справочники.Номенклатура.Выбрать(ЗапрещеннаяГруппаНоменклатуры);
        Пока Выборка.Следующий() Цикл
        Наименование = Выборка.Наименование;
        КонецЦикла;

        Номенклатура ГДЕ НЕ Номенклатура.Ссылка В
        (ВЫБРАТЬ
        ЗапрещеннаяНоменклатура.Номенклатура КАК Номенклатура
        ИЗ
        РегистрСведений.ЗапрещеннаяНоменклатура КАК ЗапрещеннаяНоменклатура)

        • Василий Ханевич

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

          Номенклатура ГДЕ НЕ Номенклатура.Родитель В
                      (ВЫБРАТЬ
                          ЗапрещеннаяНоменклатура.Номенклатура КАК Номенклатура
                      ИЗ
                          РегистрСведений.ЗапрещеннаяНоменклатура КАК ЗапрещеннаяНоменклатура)
          • Роман

            Добрый человек, все работает как нужно и спасибо еще раз за помощь! Вы крутые!

            Но, юзвери нашли лазейку, они создают новую номенклатуру в разрешенных местах и перемещают в запрещенную группу. Следовательно в запрещенной группе ее можно править.
            Не могу понять, куда добавить наше условие: “при перемещении смотреть ограничение на запрещенные группы”.

            • Василий Ханевич

              Поскольку перемещение номенклатуры в другую папку – это запись в базу, для справочника Номенклатура нужно создать ограничение доступа для права Изменение:

              Номенклатура ГДЕ НЕ Номенклатура.Родитель В
                          (ВЫБРАТЬ
                              ЗапрещеннаяНоменклатура.Номенклатура КАК Номенклатура
                          ИЗ
                              РегистрСведений.ЗапрещеннаяНоменклатура КАК ЗапрещеннаяНоменклатура)

              Приложил пример – ЗапрещеннаяНоменклатура.zip.
              В этой базе в папке Запрещенные нельзя создать новые элементы, переместить в нее другие элементы тоже нельзя.

  3. Vita_sh

    Добрый день! Наблюдаю интересную картину. Есть 3 типа заказов. По ним есть счета. В один счет могут входить разные типы заказов. Заказы перечислены в табличной части. На заказ с Типом1 у пользователя права чтение/запись, на Тип2 только чтение, на Тип3 ничего. Так вот если в одном счете есть Тип1 и Тип2, то счет можно записать (да как???). Если только Тип2, то записать нельзя. Если Тип1 и Тип3, то записать тоже нельзя. Я не понимаю, почему дает записать счет с типами заказов Тип1 и Тип2. Что это за метаморфозы?? Как я понимаю, счет это у нас целостная сущность. Внутри нее есть подсущности с разными правами доступа. Возможно, есть какие-то приоритеты, по которым RLS выбирает, какой уровень доступа наложить на счет?

    • Василий Ханевич

      Добрый день!
      Трудно ответить однозначно без анализа конкретной базы. Поэтому я бы порекомендовал в первую очередь упростить всё – создать пустую, чистую базу, в ней создать нужные объекты метаданных (счет, различные виды заказов), настроить в роли ограничения доступа на уровне записей. Отсечь всё лишнее, чтобы остальные моменты не оказывали влияния на права доступа. И на таком упрощенном примере потестировать поведение системы.
      Также важно, что если в одной роли есть несколько ограничений, то такие ограничения, полученные из одной роли, объединяются при помощи И. Возможно, в Вашем случае это также повлияло на полученный результат.

  4. ivprovotorov

    Добрый день! Попытался в Демонстрационная конфигурация “Библиотека стандартных подсистем”, редакция 2.4 (2.4.6.241) ,платформа 8.3.14.1565 ,реализовать добавление нового вида доступа. Через изменение ПриЗаполненииВидаДоступа , ПриЗаполненииИспользованияВидаДоступа и определяемого типа ЗначенияДоступа. Но что-то не получилось. Точка остановки в процедуре ПриЗаполненииВидовДоступа даже не отрабатывет. В чем может быть причина?

  5. Foat

    Может ли RLS помочь в ситуации , когда нужно одной и той же роли разрешить или запретить Запись и Проведение документа по Отбору ?

    • Василий Ханевич

      Добрый день!
      Да, можно ограничить запись документа в базу при помощи RLS. Для этого нужно будет настроить ограничение доступа в роли. Если условие выполняется, документ может быть записан в базу. Если условие не выполняется, документ нельзя записать.
      При помощи RLS нельзя ограничить проведение, можно только Чтение, Добавление, Изменение, Удаление.

      • Foat

        Но помещать такого рода алгоритм, наверно не стоит , например:
        В рлс , перед изменением Документа , Рлс контролирует остаток после записи и если Отрицательный остаток , то не даст пользователю изменить документ . Да я конечно понимаю , что для этого есть кучу и других мест

        • Василий Ханевич

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

  6. kvt500

    А вот есть еще “Механизм разделения данных”. Как он согласуется с RLS?
    Это механизм который должен заменить RLS? Как там дела обстоят в новых флагманских решениях, по-прежнему используют RLS или перешли на механизм разделения данных?

    • Василий Ханевич

      Добрый день!
      Механизм разделения данных и RLS – это два разных механизма. Они не взаимоисключают друг друга, могут использоваться совместно.

      Разделение данных организуется при помощи объекта метаданных Общий реквизит (он появился в платформе 8.2.14), у которого свойство “Разделение данных” имеет значение “Разделять”. Этот механизм позволяет разделять единую информационную базу на отдельные области, при этом пользователи будут работать в единой общей базе, но независимо друг от друга.
      Подробнее про общие реквизиты можно прочитать, например, здесь
      Работа с 1С в “облаках” как раз базируется на механизме разделения данных.

      Механизм ограничения доступа на уровне записей (RLS) позволяет ограничить доступ к части данных в определенной таблице. Например, видеть не всех контрагентов, а только тех, за которых отвечает конкретный менеджер.

      Механизм разделения данных и RLS могут использоваться совместно. Получается, что пользователь работает в отдельной области единой большой базы, и внутри этой области видит только часть данных (только своих контрагентов).
      Разделители используются в актуальных конфигурациях на базе БСП “1С:Бухгалтерия 8” (ред. 3.0), “1С:Управление торговлей 11” и т.д.:
      Общие реквизиты
      В этих же конфигурациях в ролях реализованы ограничения доступа на уровне записей. Таким образом, используются оба механизма.

  7. Анна

    Подскажите, а чтобы обратиться к реквизиту текущего пользователя в рлс напирмер физлицо то для этого отдельно нужно создавать параметр сеанса? ГДЕ ФизЛицо = &ТекущийПользователь (нужно физ лицо которое задано у пользователя

  8. Алексей

    Добрый день!
    Подскажите с помощью ЛСР возможно сделать Роль пользователей которая будет ограничивать доступ к данным(документы отчеты) за прошлые периода, оставляя только доступ за текущий год?

    • Василий Ханевич

      Добрый день!
      Да, так можно сделать.
      Создаем параметр сеанса НачалоТекущегоГода. Используем этот параметр в тексте запроса ограничения доступа:

      ГДЕ Дата >= &НачалоТекущегоГода

      Тогда пользователю будут доступны только документы, удовлетворяющие этому условию.

      • Алексей

        Если я правильно понимаю после создания параметра сеанса, можно создать копию роли Полные права, и в ней в шаблоне ограничений создать шаблон с текстом запроса:
        ГДЕ Дата >= &НачалоТекущегоГода

        Правильно понимаю?

        • Василий Ханевич

          Роль можно или скопировать, или отредактировать существующую.
          Для установки ограничений в редакторе роли используется таблица Ограничения доступа к данным:
          Ограничение доступа
          Также можно использовать шаблоны ограничений.

          • Алексей

            Спасибо за вашу помощь!
            Но я так понимаю это нужно будет устанавливать на каждый документ, а можно как то применить сразу ко всем документам? И как и если не сложно еще подскажите как можно применить к отчетам.
            Еще раз спасибо!

            • Василий Ханевич

              1. Можно назначить ограничение доступа сразу группе объектов метаданных.
              Для этого вызываем контекстное меню для корневого узла конфигурации, выбираем пункт Все ограничения доступа:
              Все ограничения доступа
              В открывшемся конструкторе добавляем новое ограничение. Указываем перечень объектов, на которые оно должно распространяться:
              Документы
              Задаем текст ограничения:
              Текст ограничения
              Этот текст присваивается всем выбранным объектам:
              Объекты

              2. Назначить ограничение доступа на отчеты или обработки нельзя, потому что они не хранятся в базе. Чтобы пользователь получал данные с учетом установленных ограничений доступа, в запросе нужно использовать ключевое слово РАЗРЕШЕННЫЕ.

    • Василий Ханевич

      Добрый день!
      Нет, это разные механизмы, расширения не являются альтернативой RLS.
      Расширения предназначены для выполнения доработок, при этом не изменяя саму конфигурацию, а RLS – для ограничения доступа на уровне данных.
      При помощи расширений конфигурации можно изменять роли и ограничения доступа на уровне записей.

  9. Leits

    Здравствуйте!

    У клиента все менеджеры строго имеют доступ только к своим клиентам и соответственно документы видят только по ним.

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

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

    • Василий Ханевич

      Добрый день!
      Попробуйте использовать вид доступа Пользователи. У него есть одно постоянное разрешенное значение – это текущий пользователь сеанса.
      Дальше нужно выяснить, применяется ли этот вид доступа для требуемых типов документов. Здесь можно воспользоваться отчетом по правам доступа, который открывается из карточки пользователя. В нем посмотреть, применяется ли вид доступа Пользователи.
      Если не применяется, то остается разделять клиентов на сегменты по-другому или использовать другие виды доступа – по складам, по подразделениям и т.д.

  10. Boojin

    Здравствуйте! Имеется система — 1с 8.3 — УТ10.3. Суть дела. Хочу ограничить доступ кассиру к печати ценников, чтобы он мог только делать подбор и заполнение цен и количества, а вот исправлять цену после заполнение из системы он бы уже не могу.
    Я вношу исправление в конфи-ии в их назначенной роли, убираю «редактирование», оставляя только «просмотр» в табличной части. Но все равно они могут вносить изменения.

    • Василий Ханевич

      Добрый день!
      Ограничения прав на уровне реквизитов работают только для управляемых форм. А в УТ 10.3 используются обычные формы. В модуле формы этой обработки можно реализовать программное изменение доступности для поля с ценой в зависимости от прав пользователя.

  11. sun-alena@yandex.ru

    Добрый день! в ЕРП имеется справочник ФизическиеЛица, в котором содержится как общая так и персональная информация.
    Есть ли возможность ограничить доступ пользователей к реквизитам ИНН,СНИЛС, адрес проживания, паспортные данные и др…

    Или чтобы пользователи могли только выбирать элементы из этого справочника, но не могли зайти в саму карточку.

    • Василий Ханевич

      Добрый день!
      На сегодняшний день в типовой ERP такой возможности нет.
      Например, роль роль ЧтениеДанныхФизическихЛицЗарплатаКадры дает право на чтение и справочника ФизическиеЛица, и регистра сведений ДокументыФизическихЛиц (паспортные данные физлиц).
      Но технически это можно реализовать.
      Немного подробнее про права доступа в ЗУП 3 (он же используется в ERP) есть на сайте ИТС – Права доступа.

  12. Макс

    Добрый день,
    а в ерп 2.2 есть возможность настроить ограничение доступа на план счетов?
    надо разграничить бухгалтеров по доступам к отчетам по бух счетам(осв).
    это настраивается в конфигураторе?

    спасибо

    • Василий Ханевич

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

      • Макс

        а вы можете привести пример?
        не совсем понимаю реализацию таких ограничений

        • Василий Ханевич

          Вообще ограничения доступа на уровне записей представляют собой дополнительные условия к запросам, которые будут выполняться на уровне СУБД.

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

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

          Также в комментарии обсуждается похожая задача.

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

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

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.