Внедрение 1C Блог О нас
 
1С:Франчайзинг На главную Написать нам

Rls 1с что это


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

##КонецЕсли

programmist1s.ru

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

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

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

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

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

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

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

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

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

Но это не все.

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

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

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

xn----1-bedvffifm4g.xn--p1ai

Расширение системы ролей RLS в 1С 8

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

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

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

рис. 1

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

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

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

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

рис.2

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

рис. 3

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

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

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

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

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

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

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

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

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

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

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

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

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

Итоги

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

1chelp.net

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

 +5 

    Когда требуется более тонкая настройка доступа, на помощь приходит механизм RLS - Record Level Security. Конфигурации системы «1С:Предприятие» 8 изначально позиционировалась как программа для многофирменного учета, и один из первых возникающих вопросов – как бы сделать так, что бы пользователь видел только те данные, которые ему положено видеть, и никакие другие? Конечно, есть роли, с помощью которых можно разрешить или запретить то или иное действие над объектом конфигурации, есть интерфейсы, позволяющие минимизировать пункты меню. Но как быть в случае, когда к одному и тому же объекту конфигурации нужно организовать «интеллектуальный» доступ, скрывающий только определенный записи? Ярким примером служит справочник «Организации»: учет в базе ведется по нескольким фирмам, справочник физически один, документы по фирмам ведутся одни и те же. Понятно, что в этом случае в назначенных ролях пользователя нельзя просто убрать права на чтение и просмотр, нужна более детальная настройка - RLS. Ограничения RLS можно задавать для следующих действий над объектами базы данных: - Чтение – получение записей из таблицы базы данных; - Добавление – добавление новых записей без изменения существующих; - Изменение – изменение существующих записей; - Удаление – удаление некоторых записей без внесения изменений в другие. Ограничение доступа задаётся подмножеству, определяемому условием выборки, заданному с помощью языка запросов. Если результат выполнения запроса ИСТИНА, то доступ на определенное действие будет предоставлен, в противном случае доступ будет запрещен. Пример запроса:Код 1C v 8.х ##Если &ИспользоватьОграничениеПоОрганизации ИЛИ &ИспользоватьОграничениеПоФизическиеЛица ##Тогда ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СоставГруппы.Ссылка КАК ГруппаПользователей ИЗ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей ПО (ИСТИНА) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК ОбособленныеПодразделения ПО ОбособленныеПодразделения.ГоловнаяОрганизация = ТекущаяТаблица.#Параметр(1) И НЕ ОбособленныеПодразделения.ГоловнаяОрганизация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) ИЛИ ОбособленныеПодразделения.Ссылка = ТекущаяТаблица.#Параметр(1) ГДЕ (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 КАК ПолеОтбора ИЗ РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ГДЕ НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей И ВЫБОР ##Если &ИспользоватьОграничениеПоОрганизации ##Тогда КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) ТОГДА ВЫБОР КОГДА 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ (ВЫБРАТЬ 1 КАК ПолеОтбора ) КАК Оптмизация ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = ОбособленныеПодразделения.Ссылка И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ##КонецЕсли ##Если &ИспользоватьОграничениеПоФизическиеЛица ##Тогда КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ФизическиеЛица) ТОГДА ВЫБОР КОГДА 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = ФизическиеЛица.ГруппаДоступаФизическогоЛица И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ФизическиеЛица) И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные) И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)) ГДЕ ФизическиеЛица.Ссылка = ТекущаяТаблица.#Параметр(2)) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ##КонецЕсли ИНАЧЕ ИСТИНА КОНЕЦ = ЛОЖЬ)) И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL ##КонецЕсли В качестве переменных в запросах RLS используются специальные объекты конфигурации – параметры сеанса. Кроме привычных типов объектов, тип параметра может быть такжеNULL, УникальныйИдентификатор, ФиксированныйМассив, ВидДвиженияНакопления и др. Особо хочется отметить тип ХранилищеЗначений, позволяющий хранить разнородные данные в одном параметре (например, ОбщиеЗначения). Значения параметров сеанса обычно задается в процедуре ПриНачалеРаботыСистемы. Так, при выводе списка номенклатуры можно отображать только некоторые группы справочника, при выборе контрагента в документ можно показывать не всех контрагентов, а только тех, к которым позволено работать пользователю, при формировании отчета скрывать данные по определенному подразделению. Вариантов применения RLS масса, нужды бизнеса иногда диктуют порой умопомрачительные требования, например разграничения доступа к проектам и спецификациям. Заданные ограниченияRLS добавляются системой к каждому запросу, каждому действию с базой данных. Поэтому необходимо помнить, что злоупотребление механизмом RLS чревато снижением быстродействия системы. В типовых конфигурациях возможность настройки прав доступа на уровне записей организована только для групп пользователей. Т.е. каждый пользователь системы включается в одну или несколько групп, для которых настраивается правило доступа к объекту или множеству элементов. Чем в большее количество групп входит пользователь, тем ниже будет производительность системы. Платформа 1С в явном виде не предоставляет возможность отладки работы механизма RLS, но тем ни менее сделать это вполне реально. Для этого можно воспользоваться универсальной консолью отчетов (версия не ниже 2.6.9.2), на закладке «Данные» у которой есть функция «Выполнить от имени». Обработка создаст COM-соединение с помощью указанного имени пользователя и пароля, и выдаст результат выполнения запроса в консоль.

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

helpf.pro


Смотрите также