Настройка RLS в 1С — ограничение доступа на уровне записей
Ранее мы рассматривали настройку ролей пользователей в системе 1С Предприятие 8, сегодня мы продолжим изучение механизма прав и углубимся далее — в механизм RLS (ограничение прав на уровне записей).
Ниже мы рассмотрим достоинства и недостатки данного метода и рассмотрим настройку RLS в 1С Предприятии 8.3 на примере.
1С RLS (Record Level Security) или ограничение прав на уровне записи — это настройка прав пользователей в системе 1С, которая позволяет разделить права для пользователей в разрезе динамически меняющихся данных.
Самый распространенный вид настройки 1C RLS — ограничение видимости пользователя в разрезе организаций или клиентов (пользователь видит лишь «свои» данные).
Преимущества ограничения прав на уровне записей в 1С
Основное преимущество — наличие механизма вообще, механизм достаточно сложный и интересный. Позволяет очень тонко разграничить права пользователей — пользователи могут даже не догадываться о существовании в системе других данных.
Недостатки 1С 8 RLS
Среди недостатков можно отметить заметное падение производительности системы. Это вызвано тем, что платформа при построении запроса в базе данных осложняет любой запрос разработчика дополнительными условиями.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Также среди недостатков — сложность настройки этого функционала и сложность отладки. 1C выпустило очень мало материалов по настройке и работе этого функционала. Достаточно трудно найти специалиста, который грамотно настроил бы механизм.
Настройка ограничения прав на уровне записей 1С RLS
Ограничение прав на уровне записи (RLS) применяется для ограничения следующих типов прав:
##Если &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей ##Тогда
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
СоставГруппы.Ссылка КАК ГруппаПользователей
ИЗ
Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
ГДЕ
СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
ПО (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей)
ГДЕ (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ
ИЛИ (НЕ 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1 КАК ПолеОтбора
ИЗ
РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
ГДЕ
НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
И ВЫБОР
КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
И ТекущаяТаблица.#Параметр(1) ССЫЛКА Справочник.Контрагенты
И НЕ ТекущаяТаблица.#Параметр(1) = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
Справочник.Контрагенты КАК Контрагенты ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
ПО
НастройкиПравДоступаПользователей.ОбъектДоступа = Контрагенты.ГруппаДоступаККонтрагенту
И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей
ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
И НастройкиПравДоступаПользователей.Запись = ИСТИНА
ГДЕ
Контрагенты.Ссылка = ТекущаяТаблица.#Параметр(1))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ИНАЧЕ ИСТИНА
КОНЕЦ = ЛОЖЬ))
И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL)
##КонецЕсли
По сути, этот запрос каждый раз добавляется при запросе к таблице «#ТекущаяТаблица». Из чего можно представить, какую дополнительную нагрузку несет в себе механизм ограничения на уровне записи.
Как Вы видите, в запросе есть специальные параметры, например » &ИспользоватьОграниченияПравДоступаНаУровнеЗаписей». Это параметры в РЛС подбираются из объектов метаданных — «Параметры сеансов«. Как правило, они задаются при старте сессии пользователя.
Конструктор ограничения доступа к данным
Для удобства разработчика в 1С 8.3 есть специальная утилита для помощи в настройки РЛС — Конструктор ограничения доступа к данным. Он вызывается из поля «Ограничение доступа». Выглядит следующим образом:
Другие статьи по 1С:
Пример настройки RLS:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник статьи: http://programmist1s.ru/nastroyka-rls-ogranichenie-dostupa-na-urovne-zapisey-1s/
RLS – гибкая и тонкая настройка ограничений доступа к данным
Классическая задача: открыть пользователю доступ к какому-либо объекту, но не ко всем элементам / документам, а только к некоторым.
Или это может быть ограничение “все, кроме некоторых”.
Или ограничение не на справочники/документы, а на данные регистров…
По сути – это тонкая и очень гибкая настройка “что можно видеть этому пользователю, а о чем ему и не нужно догадываться”.
Почему именно RLS?
На большинстве внедрений требуется для разных пользователей установить различные уровни доступа к информации в базе.
В конфигурациях за возможные права доступа к данным отвечают специальные объекты метаданных – роли. Каждому пользователю информационной базы назначается одна или несколько ролей. Они определяют, возможны ли операции с конкретными объектами метаданных (чтение, запись, проведение и т.д.).
Часто бывает необходимо не просто открыть/запретить доступ к определенному объекту, а ограничить доступ к части данных в нем.
Только при помощи ролей решить такую задачу нельзя – для этого реализован механизм ограничения доступа на уровне записей (RLS).
Ограничения представляют собой условия, при выполнении которых действие над данными (чтение, запись и т.д.) будет разрешено. – так можно ограничить доступ не к объекту в целом, а только к части его данных.
Про RLS – более подробно: 8 видео и PDF
Поскольку это распространенная задача администрирования 1С – предлагаем посмотреть более детальные материалы:
PDF с вводной информацией.
21 страница, которые нужно прочесть сначала.
Видео 01:
Ограничение доступа к данным при помощи ролей
В этом видео рассказывается, как ограничивается доступ к данным при помощи ролей. Уточняется, что роли ограничивают доступ к виду объектов информационной базы (отдельный справочник, но не конкретные элементы справочника).
Видео 02:
Ограничение доступа на уровне записей (RLS)
В этом видео рассказывается о механизме ограничений доступа на уровне записей (RLS), когда можно настроить доступ не ко всему справочнику в целом, а к отдельным его элементам, в зависимости от хранящихся в информационной базе данных. Подобные ограничения прописываются в ролях.
Видео 03:
Реализация ограничения доступа на уровне записей для справочника Контрагенты
В этом видео рассказывается, как в демонстрационной конфигурации «Управляемое приложение» настроить доступ менеджеров только к собственным контрагентам, закрепленным за ними.
Видео 04:
Принцип работы ограничений доступа на уровне записей на низком уровне
В этом видео рассказывается, как платформа трансформирует запросы, передаваемые для выполнения на сервер СУБД, при наличии ограничений доступа на уровне записей.
Видео 05:
Совместное применение нескольких ограничений доступа на уровне записей
Пользователю информационной базы может быть назначено несколько ролей. При этом в каждой роли могут быть свои ограничения доступа на уровне записей. В этом видео рассказывается, как ведет себя система при наложении ограничений.
Видео 06:
Наложение ограничений методом ВСЕ
В этом видео описывается первый способ наложения ограничений на уровне записей – метод ВСЕ. При этом, если в выборку попадают записи, к которым доступ ограничен, будет выведено сообщение об ошибке.
Видео 07:
Наложение ограничений методом РАЗРЕШЕННЫЕ
В этом видео описывается первый способ наложения ограничений на уровне записей – метод РАЗРЕШЕННЫЕ. При этом в выборку попадут только те записи, к которым у пользователя есть права доступа.
Видео 08:
Исправление ошибки, возникающей из-за наложения прав доступа на уровне записей
В этом видео рассматривается, как при помощи ключевого слова РАЗРЕШЕННЫЕ исправить ошибку, возникающую под пользователем с ограниченными правами.
Не пропустите – все сразу и в полном объеме!
Этот курс позволит решать ВСЕ задачи по развертыванию и поддержке информационных систем на 1С.
Вот несколько тем из курса:
- Установка и обновление платформы «1С:Предприятие 8» – ручная и автоматическая, под Windows и Linux
- Автоматический запуск для выполнения регламентных операций
- Обновление конфигураций из пользовательского режима
- Обновление нетиповых конфигураций. Как избежать проблем при обновлении измененных типовых конфигураций
- Создание собственных cfu-файлов поставки
- Инструменты БСП: внешние формы, обработки заполнения документов и т.п.
- Использование бесплатной СУБД PostgreSQL
- Установка и запуск кластера серверов 1С:Предприятие 8
- Утилита администрирования для настройки кластера и рабочих серверов
- Настройка RLS на примере УПП 1.3 и ERP 2
- Что делать, если данные в ИБ повреждены
- Настройка обменов данными между конфигурациями
- Организация групповой разработки
- Настройка и использование аппаратных ключей защиты
- Программные лицензии 1С: установка и привязка к внешнему оборудованию
Даже на 3-5 пользователей. Тем более – если их хотя бы десяток…
Вам в любом случае когда-то придется разворачивать 1С, настраивать резервирование, права доступа, различные режимы запуска, тестировать целостность баз, обеспечивать работу серверов и т.д.
И лучше это сразу делать правильно.
Чтобы потом не было “…! Ну что за …! Твою же …!” – и прочих выражений сожаления 🙂
Комментарии / обсуждение (157):
Добрый день, в учебной версии при использовании rls столкнулся с проблемой при записи или проведении документа (у пользователя недостаточно прав на использование операций над базой данных), причём в полной версии 1с данной проблемы не встречал.
В журнале регистраций ссылается на отказ доступа (действие-чтение)
Ограничение делал простое:
Как можно решить данную проблему?
Заранее огромное спасибо!
P.S.: не судите строго я недавно начал изучать 1с.
У учебной версии нет ограничений по RLS. Проверяйте, скорее всего у пользователя действительно недостаточно прав на использование операций над базой данных.
Добрый день!
Хотел уточнить, при установки ограничения по текущему пользователю на документ, сам пользователь проводить свои документы может или он их сможет только просмотреть и ему всё же будет отказано в доступе, как в моем случае?
Это зависит от-того на какое право наложено ограничение, чтение или запись.
Ограничение накладываю на чтение, после чего получаю ошибку: “У пользователя недостаточно прав на исполнение операции над базой данных”.
Журнал регистрации ссылается на отказ в доступе. При попытке чтения данных.
Ваш ответ исчерпывает сам себя. Наложили ограничение на чтение, получили отказ в доступе при попытке чтения данных.
Добрый день!
Спасибо за Ваши ответы!
Я понял свою ошибку.
Пожалуйста!
Интересного обучения!
Добрый день!
Полезен ли курс для чистого консультанта, без навыков программирования? Впереди проект со сложной настройкой прав и RLS.
Если Вы не просто консультант, а дополнительно еще и аналитик, ставящий программистам задачи на разработку, то курс будет безусловно полезен. Если “чистый” консультант и все задачи реализуете штатными механизмами, тогда смысла нет.
Приветствую Василий, есть задача в ут 10.3 ограничить доступ пользователей на доп свойства справочника контрагентов сейчас RLS используется для доступа к контрагентам не могу сообразить на какой объект лучше написать правило ограничения на регистрсведений.ЗначенияСвойствОбъектов или на планВидовХарактеристик.СвойстваОбъектов?
Добрый день!
Нужно ограничивать оба объекта – и ПВХ СвойстваОбъектов, и регистр сведений ЗначенияСвойствОбъектов.
Потому что пользователю с ограниченными правами нужно видеть только выборочные, разрешенные элементы ПВХ, а также записи в регистре только по этим элементам ПВХ и по разрешенным контрагентам.
Приветствую.
Хотел интегрировать в стандартный механизм ограничения по контрагентам ут10.3 не могу разобраться синтаксисом у вас в лекции пример ограничения виде запроса а в Ут ввиде таблицы: #таблицаОсновногоВидаОбъектаДоступа(“Контрагенты”,”ГруппыдоступакКонтрагенту”,”ИлиЭтоГруппа”) хотел уточнить как лучще поступить делать ограничичение для свойств отдельным условием (запросом)или возможно дописать чтобы они попадали в эту таблицу?
Добрый день!
Конструкция, начинающаяся с #, – это шаблон ограничения доступа. Увидеть шаблоны в форме роли на закладке Шаблоны ограничений:
Шаблон может содержать параметры, которые выделяются в его тексте при помощи символа #.
Платформа подставляет значения параметров в шаблон ограничения. Так формируется готовый текст ограничения доступа, который и будет использоваться при работе.
В Вашем случае может быть два варианта решения:
1. Вы не используете сложные типовые шаблоны, самостоятельно прописываете собственное ограничение при помощи простого запроса.
2. Вы анализируете существующие в типовой конфигурации шаблоны, подбираете подходящий, используете его. Можно поискать в конфигурации похожие примеры в ролях, взять их в качестве образца.
Добрый день. Имеется такая задача, есть ветка номенклатуры, которая привязана к магазину, и всю номенклатуру в этой группе и подгруппах необходимо разрешить изменять только 1-2м пользователям.
У соответствующей роли можно убрать галку прав на чтение, но как сделать, что бы эти правила распространялись только на группу магазин, а не блокировали абсолютно все.
Спасибо за помощь и видео, очень интересно!
Добрый день!
Предлагаю сделать регистр сведений РазрешеннаяНоменклатура, куда записывать все номенклатуры, которые можно изменять указанным пользователям. Например, в регламентном задании выбираем номенклатуры из определенных групп, записываем в регистр. Получается что-то похожее на состав сегментов номенклатуры из УТ 11.
Затем в роли для справочника Номенклатура для права Изменение прописать ограничение доступа, например, вот так:
Т.е. пользователю с этой ролью можно изменять только те элементы справочника Номенклатура, которые содержатся в указанном регистре.
Спасибо за совет, сделал как вы сказали, все работает! Единственное, не смог самостоятельно доработать. Не поможете довести до ума?)
В РегистреСведений в Измерения добавил в Данные свойство “СправочникСсылка.Номенклатура” ЗапрещеннаяГруппаНоменклатуры, установил ВыборГрупп, создал форму и выставил тип “ВыборГрупп”.
Это все работает, выбираются только группы, как и нужно.
У меня УТ 10.3, иду в Операции – Регистр Сведений – выбираю свой. Там добавляю группы, все ОК!
Единственное, не понимаю, как добить условие в Роли ограничение доступа Изменение. Запрет редактирование всего, что есть в РегистреСведений, по группам. Разматывать всю иерархию не нужно, достаточно только 1 погружение, мне не влом добавить все подгруппы. Просто как-то нужно правильно свести код:
Выборка = Справочники.Номенклатура.Выбрать(ЗапрещеннаяГруппаНоменклатуры);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;
Номенклатура ГДЕ НЕ Номенклатура.Ссылка В
(ВЫБРАТЬ
ЗапрещеннаяНоменклатура.Номенклатура КАК Номенклатура
ИЗ
РегистрСведений.ЗапрещеннаяНоменклатура КАК ЗапрещеннаяНоменклатура)
Отлично, что заработало!
Поскольку в регистре хранятся группы номенклатуры, а не элементы, то будем работать с реквизитом Родитель.
Ограничение доступа может выглядеть, например, вот так:
Добрый человек, все работает как нужно и спасибо еще раз за помощь! Вы крутые!
Но, юзвери нашли лазейку, они создают новую номенклатуру в разрешенных местах и перемещают в запрещенную группу. Следовательно в запрещенной группе ее можно править.
Не могу понять, куда добавить наше условие: “при перемещении смотреть ограничение на запрещенные группы”.
Поскольку перемещение номенклатуры в другую папку – это запись в базу, для справочника Номенклатура нужно создать ограничение доступа для права Изменение:
Приложил пример – ЗапрещеннаяНоменклатура.zip.
В этой базе в папке Запрещенные нельзя создать новые элементы, переместить в нее другие элементы тоже нельзя.
Добрый день! Наблюдаю интересную картину. Есть 3 типа заказов. По ним есть счета. В один счет могут входить разные типы заказов. Заказы перечислены в табличной части. На заказ с Типом1 у пользователя права чтение/запись, на Тип2 только чтение, на Тип3 ничего. Так вот если в одном счете есть Тип1 и Тип2, то счет можно записать (да как. ). Если только Тип2, то записать нельзя. Если Тип1 и Тип3, то записать тоже нельзя. Я не понимаю, почему дает записать счет с типами заказов Тип1 и Тип2. Что это за метаморфозы?? Как я понимаю, счет это у нас целостная сущность. Внутри нее есть подсущности с разными правами доступа. Возможно, есть какие-то приоритеты, по которым RLS выбирает, какой уровень доступа наложить на счет?
Добрый день!
Трудно ответить однозначно без анализа конкретной базы. Поэтому я бы порекомендовал в первую очередь упростить всё – создать пустую, чистую базу, в ней создать нужные объекты метаданных (счет, различные виды заказов), настроить в роли ограничения доступа на уровне записей. Отсечь всё лишнее, чтобы остальные моменты не оказывали влияния на права доступа. И на таком упрощенном примере потестировать поведение системы.
Также важно, что если в одной роли есть несколько ограничений, то такие ограничения, полученные из одной роли, объединяются при помощи И. Возможно, в Вашем случае это также повлияло на полученный результат.
Добрый день! Попытался в Демонстрационная конфигурация “Библиотека стандартных подсистем”, редакция 2.4 (2.4.6.241) ,платформа 8.3.14.1565 ,реализовать добавление нового вида доступа. Через изменение ПриЗаполненииВидаДоступа , ПриЗаполненииИспользованияВидаДоступа и определяемого типа ЗначенияДоступа. Но что-то не получилось. Точка остановки в процедуре ПриЗаполненииВидовДоступа даже не отрабатывет. В чем может быть причина?
Добрый день!
Предполагаю, что Вы не запустили обновление вспомогательных данных в пользовательском режиме. Для этого можно воспользоваться следующими способами:
– Использовать обработку Инструменты разработчика: Обновление вспомогательных данных из состава БСП
– Использовать параметр запуска ЗапуститьОбновлениеИнформационнойБазы
– Увеличить номер версии конфигурации
Добрый день! Вы правы , именно обновление вспомогательных данных не выполнил. Спасибо.
Может ли RLS помочь в ситуации , когда нужно одной и той же роли разрешить или запретить Запись и Проведение документа по Отбору ?
Добрый день!
Да, можно ограничить запись документа в базу при помощи RLS. Для этого нужно будет настроить ограничение доступа в роли. Если условие выполняется, документ может быть записан в базу. Если условие не выполняется, документ нельзя записать.
При помощи RLS нельзя ограничить проведение, можно только Чтение, Добавление, Изменение, Удаление.
Но помещать такого рода алгоритм, наверно не стоит , например:
В рлс , перед изменением Документа , Рлс контролирует остаток после записи и если Отрицательный остаток , то не даст пользователю изменить документ . Да я конечно понимаю , что для этого есть кучу и других мест
Нет, такой алгоритм не стоит использовать в выражениях ограничений доступа из соображений производительности.
Эти действия лучше выполнять при проведении документа.
А вот есть еще “Механизм разделения данных”. Как он согласуется с RLS?
Это механизм который должен заменить RLS? Как там дела обстоят в новых флагманских решениях, по-прежнему используют RLS или перешли на механизм разделения данных?
Добрый день!
Механизм разделения данных и RLS – это два разных механизма. Они не взаимоисключают друг друга, могут использоваться совместно.
Разделение данных организуется при помощи объекта метаданных Общий реквизит (он появился в платформе 8.2.14), у которого свойство “Разделение данных” имеет значение “Разделять”. Этот механизм позволяет разделять единую информационную базу на отдельные области, при этом пользователи будут работать в единой общей базе, но независимо друг от друга.
Подробнее про общие реквизиты можно прочитать, например, здесь
Работа с 1С в “облаках” как раз базируется на механизме разделения данных.
Механизм ограничения доступа на уровне записей (RLS) позволяет ограничить доступ к части данных в определенной таблице. Например, видеть не всех контрагентов, а только тех, за которых отвечает конкретный менеджер.
Механизм разделения данных и RLS могут использоваться совместно. Получается, что пользователь работает в отдельной области единой большой базы, и внутри этой области видит только часть данных (только своих контрагентов).
Разделители используются в актуальных конфигурациях на базе БСП “1С:Бухгалтерия 8” (ред. 3.0), “1С:Управление торговлей 11” и т.д.:
В этих же конфигурациях в ролях реализованы ограничения доступа на уровне записей. Таким образом, используются оба механизма.
Подскажите, а чтобы обратиться к реквизиту текущего пользователя в рлс напирмер физлицо то для этого отдельно нужно создавать параметр сеанса? ГДЕ ФизЛицо = &ТекущийПользователь (нужно физ лицо которое задано у пользователя
Добрый день!
Да, для этого можно использовать параметр сеанса.
Источник статьи: http://xn—-1-bedvffifm4g.xn--p1ai/news/rls-data-access-restrictions/