новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Права доступа в УПП. RLS. Шаблон ограничений доступа по организациям

  • Добавить свою публикацию
  • для этого требуется регистрация

Предисловие

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

Изображение

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

Шаблон

Текст шаблона будем анализировать для роли "Пользователь", которая автоматически добавляется для всех пользователей информационной базы. Откроем ее в конфигураторе и перейдем к ее настройкам для справочника "Организации". Мы увидим следующее для права "Чтение":

Изображение

Перейдя на вкладку "Шаблоны ограничений" и открыв текст шаблона ограничений мы увидим такой шаблон:

// Получаем признак использования ограничений на 
// уровне записей для справочника "Организации"
// из одноименного параметра сеанса
#Если &ИспользоватьОграничениеПоОрганизации #Тогда
ТекущаяТаблица
ИЗ
// "#ТекущаяТаблица" - это имя таблицы, к которой выполняется запрос
// В нашем примере это таблица справочника "Организации"
    #ТекущаяТаблица КАК ТекущаяТаблица
        ЛЕВОЕ СОЕДИНЕНИЕ 
// К текущей таблице присоединяется результат вложенного запроса,
// получающий список групп пользователей, в которых 
// состоит текущий пользователь. В результате к элементу спр.
// "Организации" присоединяются левым соединением все группы
// текущего пользователя
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        (ВЫБРАТЬ РАЗЛИЧНЫЕ
            СоставГруппы.Ссылка КАК ГруппаПользователей
        ИЗ
            Справочник.ГруппыПользователей.ПользователиГруппы 
                                                     КАК СоставГруппы
        ГДЕ // ТекущийПользователь - ссылка на элемент спр. "Пользователи",
            // хранящегося в параметре сеанса "ТекущийПользователь"
            СоставГруппы.Пользователь = &ТекущийПользователь) 
                                              КАК ГруппыПользователей
        ПО (ИСТИНА)
// -------------------------------------------------------------
ГДЕ // Накладываем условия на проверку доступа к текущей организации
// Первое условие - для текущего пользователя должна быть установлена
// хотя бы одна группа пользователей, чтобы дать ему права
НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL
// Второе условие - хотя бы для одной группы пользователей, в которую
// входит текущий пользователь, должны быть установлены права на 
// чтение в регистре сведений "Настройки прав доступа пользователей" 
И
    (НЕ 1 В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    1
                ИЗ
                    // В таблице "НазначениеВидовОбъектовДоступа" получаем список 
                    // объектов доступа, на которые установлены настрйки прав для 
                    // полученного списка групп пользователей (см. выше)
					РегистрСведений.НазначениеВидовОбъектовДоступа 
                                    КАК НазначениеВидовОбъектовДоступа
                    // Присоединяем таблицу "НастройкиПравДоступаПользователей",
                    // в которой хранятся настройки доступа RLS
                    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей 
                                    КАК НастройкиПравДоступаПользователей
                        ПО
                            НастройкиПравДоступаПользователей.ОбъектДоступа 
		            // "#Параметр(1)" - это выражение получает значение параметра
                            // "Ссылка", переданного в шаблон ограничения доступа. В 
                            // нашем случае это ссылка на текущий элемент спр. "Организации"
                            // (см. скриншот выше)
                            = ТекущаяТаблица.#Параметр(1) 
                            И НастройкиПравДоступаПользователей.ВидОбъектаДоступа 
                            = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа
                            И НастройкиПравДоступаПользователей.ОбластьДанных 
                            = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)                                                                                                
                            И НастройкиПравДоступаПользователей.Пользователь 
                            = ГруппыПользователей.ГруппаПользователей
                ГДЕ                 
                     НазначениеВидовОбъектовДоступа.ГруппаПользователей 
                     = ГруппыПользователей.ГруппаПользователей
                     И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа 
                       В (ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации))                 
                     И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL))
#КонецЕсли

 Шаблон достаточно подробно закомментировал. Все должно быть понятно, если Вы читали предыдущую статью.

Влияние на запрос

 А теперь сравним изменение запроса к базе данных с учетом влияния на него ограничений на уровне записей. Пример будет основываться на рассмотренном выше тексте шаблона. И так, вот таким будет первоначальный запрос к справочнику "Организации":

"ВЫБРАТЬ 
|	* 
|ИЗ 
|	Справочник.Организации КАК Организации" 

 А вот таким он будет с учетом ограничений на уровне записей:

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

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

На этом все. Спасибо за внимание!

 

 
0
Читайте также
Специализированная конфигурация "Автоапдейтер"
Конфигурация предназначена для автоматического внесения изменений в другие конфигурация 1С 8.Х. Все модули из логируемой кофигурации (Конфигуратор - Конфигурация - Выгрузить файлы конфигурации).
Как обновить 1С 8.2
Для получения доступа к обновлениям конфигураций 1С 8.2 фирма 1С выпускает диски информационно-технического сопровождения (ИТС)
Разработки
Пользователи, права и интерфейсы
Обработка помогает в определении какие права и нтерфейсы дать пользователям
[1С 8] SubSys: Просроченные долги по срокам (режим - по расчетным документам)
Информативный отчет по просроченным долгам УТ10.3, УПП, КА
Универсальный отчет "Остатки и обороты"
Отчет "Остатки и обороты"с возможностью выводить в колонках значения, взятые из документа
Еще от автора
≡ к списку статей