Ограничение доступа к данным. Права доступа в УПП. RLS. Общие сведения и настройка Что такое rls в 1с


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

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

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

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

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

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

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

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

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

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

  • Чтение
  • Добавление
  • Изменение
  • Удаление

Получите 267 видеоуроков по 1С бесплатно:

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

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

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

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

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

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

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

Роль является объектом метаданных, благодаря которому определяется, к какому объекту и какие действия над этим объектом может выполнять тот или иной пользователь. Каждая роль содержит права и в зависимости от того какие права установит администратор БД будут происходить разграничения доступа. В технологической платформе предусмотрено два типа прав, это: основные и интерактивные. Под основными понимаются права на Чтение, Изменение,Добавление и Удаление. Интерактивные осуществляются только при выполнение таких операций, как редактирование или удаление в форме: Интерактивное удаление, Интерактивное добавление и другие.

Таким образом можно раз и навсегда включить доступ к тому или иному справочнику, документу и другим объектом метаданных, причем целиком. Вы можете дать доступ или забрать. Дать на немножко у вас не получиться. Но ведь часто возникает такая ситуация, когда существует, к примеру, огромный справочник и каждый пользователь должен видеть только определенные элементы в нем. То есть по какому- то определенному условию должен происходить отбор элементов объекта! И вот начиная с версии технологической платформы 1С 8.1 появился очень мощный механизм ограничения доступа к данным на уровне записей под названием RLS (Record Level Security). Ограничения представляют собой набор определенных условий, при выполнении которых будет предоставлять доступ или нет.

Ограничения доступа при использовании динамической системы RLS применяется к основным операциям: Чтение, Изменение, Добавление и Удаление. Существует важная особенность, заключающаяся в том, что к операции Чтение может быть применено несколько ограничений на уровне записей, в то время как ко всем остальным операциям только одно условие. Данный механизм позволяет накладывать ограничения не только на определенные записи, но и на определенные поля записей. При чем указать возможно нужно поле, а так же специальное поле <Прочие поля>.

Синтаксис и язык RLS

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

В запросе RLS всегда присутствует только одна таблица данных и она собственно используется для условий.
Используются только конструкции ИЗ и ГДЕ.
В таких условиях можно указывать в качестве параметров запроса функциональные опции и параметры сеанса.
Не допускается использование виртуальных таблиц.
Возможно использование шаблонов для создания ограничений
Операторы ИТОГИ и В ИЕРАРХИИ не применимы.

Рассмотри как произвести ограничения. к примеру на рис. 1 приведено самое простое ограничение. Оно состоит в том, что пользователь увидит только одного контрагента с определенным наименованием «Сибирская Корона ООО». Можно производить фильтр по определенному полю. Например, мы хотим,чтобы пользователь видел только контрагентов, которые находятся в папке родителе «Сотрудники».

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

Способы функционирования ограничений

Иногда при использовании RLS у пользователя может появляться ошибка, сообщающая, что недостаточно прав. Это может быть связано со способами функционирования ограничений.

  • ВСЕ. То есть в процессе наложения ограничений операция выполняется над всеми требуемыми данными БД. Однако при прочтении и изменении данных, если не выполняются ограничения для каких то записей, то происходит аварийный сбой из за нарушения прав доступа.
  • РАЗРЕШЕННЫЕ. Способ функционирования при котором в результате наложения ограничений должны быть прочитаны только те записи, которые удовлетворяют условиям. При этом аварийные сбои отсутствуют. Объекты не удовлетворяющие требованиям считаются отсутствующими.

Способ РАЗРЕШЕННЫЕ очень часто используется при формировании динамических списков, в противном случае постоянно бы появлялись ошибки о нарушении прав. Способ ВСЕ используется при получении объектов функциями встроенного языка и запросов. Собственно где устанавливаются данные способы? По умолчанию используется ВСЕ.

Использование шаблонов в RLS

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

Рассмотри на примере конфигурации 1С:Бухгалтерия 8.2 использование встроенных шаблонов. Откроем роль БУХГАЛТЕР и перейдем во вкладку Шаблоны ограничений. Здесь используется шаблон ОсновноеУсловиеЧтение следующего содержания:

Где мы видим #Параметр(1)=НастройкиПравДоступаПользователей.ОбъектДоступа. Это и есть тот самый параметр который может меняться в зависимости от передаваемых данных. Далее в любом месте где мы желаем ввести ограничения мы используем шаблон так:

То есть вместо

#Параметр(1)=НастройкиПравДоступаПользователей.ОбъектДоступа

в тексте шаблона окажется

Организация=НастройкиПравДоступаПользователей.ОбъектДоступа.

Или на более простом шаблоне. Наименование шаблона #МоиОграничения следующего содержания:

ГДЕ #Параметр(1) = &ТекущийПользователь

В результате передачи параметров в шаблон #МоиОграничения(“Исполнитель”) мы получаем следующее

ГДЕ Исполнитель= &ТекущийПользователь.

Итоги

Механизм ограничения доступа к данным на уровне записей очень мощная штука, но ее настройка требует большого опыта, так как в этих «дебрях» можно легко заблудиться. Благодаря ему можно производить любое частичное разграничение данных. С другой стороны добавление различных условий приводит к падению производительности системы, правда незначительной. Так как платформа 1С к запросу пользователя добавляет дополнительные запросы в виде ограничений. Во всем остальном- это просто отличная штука для разработчиков!

Платформа 1С:Предприятие 8 имеет встреный механизм ограничения доступа к данным на уровне записей. Общие сведения о нем Вы можете прочитать здесь . Если кратко, то RLS позволят ограничить доступ к данным по некоторым условиям на значения полей. Например, можно ограничить доступ пользователей к документам в зависимости от значения реквизита "Организация". Некоторые пользователи будут работать с документами по организации "Управляющая компания", а остальные с организацией "Молочный завод". Как пример.

Подготовка

Пример реализуем в демонстрационной конфигурации УПП 1.3. Создадим пользователя "Кладовщик" и добавим ему одноименную роль "Кладовщик".

Теперь приступим непосредственно к настройке прав доступа на уровне записей. Переключимся на интерфейс "Администрирование пользователе". В главном меню выберем "Доступ на уровне записей -> Параметры". Здесь отметим галкой "Ограничить доступ на уровне записей по видам объектов", а в списке объектов выберем "Организации".

Тем самым мы включили использование RLS. Теперь нужно его настроить.

Разграничение доступа на уровне записей настраивается не отдельно для каждого пользователя или профилей полномочий. RLS настраивается для групп пользователей. Добавим новую группу пользователей, назовем ее "Кладовщики"

Состав группы справа на форме показывает список пользователей, относящихся к этой группе. Добавим в состав созданного нами ранее пользователя. Слева таблица ограничений доступа. В настройка RLS мы выбрали, что доступ будет разграничиваться только по организациям, поэтому мы видим только один вид объекта доступа. Нажмем на кнопку "Настройка доступа". Откроется обработка настройки прав доступа для текущей группы.

В список объектов доступа для группы добавим организацию "ИЧП "Предприниматель"". Вид наследования прав оставим без изменений. Право на объект доступа установим для чтения и записи. Нажмем "ОК", настройки готовы. Мы только что настроили RLS на уровне организаций.

Что видит пользователь

Запустим программу под созданным ранее пользователем и откроем справочник "Организации". Вот так будет выглядеть список для нашего пользователя и для пользователя с полными правами:

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

Таким образом, пользователь не только не увидит организации, доступ на которые не установлен для него, но и не сможет прочитать/записать документы и другие объекты в информационной базе, на которые установлены права в роля на реквизит "Организация".

Мы рассмотрели простейший пример настройки RLS. В следующей статье поговорим о реализации механизма RLS в конфигурации "Управление производственным предприятием" версии 1.3.

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

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

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

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

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

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

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

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

Но это не все.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Все настройки прав пользователей, которые будут нами производиться в рамках этой статьи расположены в разделе 1С 8.3 «Администрирование» — «Настройки пользователей и прав». Данный алгоритм аналогичен в большинстве конфигураций на управляемых формах. В качестве примера будет использоваться программа 1С Бухгалтерия, но настройка прав в других программах (1С УТ 11, 1С ЗУП 3, 1C ERP) производиться абсолютно аналогично.

Перейдем в раздел «Пользователи» окна настроек. Здесь мы видим две гиперссылки: «Пользователи» и «Настройки входа». Первая из них позволяет перейти непосредственно к списку пользователей данной информационной базы. Прежде, чем создавать нового пользователя, рассмотрим возможные настройки входа (гиперссылка справа).

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

Теперь можно перейти к непосредственному к добавлению нового пользователя в 1С. Сделать это можно по кнопке «Создать», как показано на изображении ниже.

Первым делом укажем полное имя – «Антонов Дмитрий Петрович», и выберем из соответствующего справочника физическое лицо. Так же здесь можно указать и подразделение, в котором работает наш сотрудник.

Имя для входа «АнтоновДП» подставилось автоматически, как сокращение от полного имени «Антонов Дмитрий Петрович». Установим пароль и аутентификацию 1С Предприятия. Здесь так же можно указать, доступна ли данному пользователю самостоятельная смена пароля.

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

Обратим внимание на еще одну немаловажную настройку в карточке справочника пользователей – «Вход в программу разрешен». Если лаг не установлен, то пользователь попросту не сможет зайти в данную информационную базу.

Права доступа

После заполнения всех данный в карточке пользователя – Антонова Дмитрия Петровича, запишем их и перейдем к настройке прав доступа, как показано на рисунке ниже.

Перед нами открылся список ранее внесенных в программу профилей доступа. Отметим флажками необходимые.

Профили групп доступа

Профили групп доступа можно настроить из основной формы настройки пользователей и прав. Перейдите в раздел «Группы доступа» и нажмите на гиперссылку «Профили групп доступа».

Создадим новую группу из открывшейся формы списка. В табличной части на вкладке «Разрешенные действия (роли)» флажками необходимо отметить те роли, которые будут влиять на права доступа пользователей, входящим в создаваемую нами группу. Все эти роли создаются и настраиваются в конфигураторе. Из пользовательского режима их нельзя изменить или создать новые. Можно только выбрать из существующего перечня.

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

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

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

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

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

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