Вычисление разрешений доступа для периодических регистров сведений
Периодические регистры сведений в силу своего внутреннего устройства требуют разной логики при установке прав Чтение и Изменение. Поэтому, в отличие от других видов элементов про екта (и в отличие от непериодических регистров сведений), для вычисления разрешений на отдельные записи (RLS) они используют не одно событие ВычислитьРазрешенияДоступаДляОбъектов
, а два события, каждое для своего права:
ВычислитьКлючиДоступаДляЧтения
,ВычислитьКлючиДоступаДляИзменения
.
«1С:Шина» создает разрешения автоматически, а от вас требуется только сформировать в обработчике набор экземпляров ключей, которые надо записать в конкретное разрешение.
Событие «ВычислитьКлючиДоступаДляЧтения»
Особенность этого события заключается в том, что «Шина» создает разрешение доступа не для одной записи, а для всех записей регистра с одинаковыми значениями измерений, перечисленных в настройке РасчетИзмеренийПо. Для этого используется тип имя-регистра-сведений.КлючРазрешенийИзмерений
(подробнее).
Например, пусть задан периодический регистр сведений КурсыВалют:
ВидЭлемента: РегистрСведений
Ид: b54b10ce-603f-43bf-8067-9716c4986df5
Имя: КурсыВалют
ОбластьВидимости: ВПроекте
КонтрольДоступа:
Разрешения:
Чтение: РазрешенияВычисляютсяДляКаждогоОбъекта
Изменение: РазрешенияВычисляютсяДляКаждогоОбъекта
РасчетРазрешенийПо:
- Валюта
Периодичность: День
Измерения:
-
Ид: 9900df46-d5bd-4826-8969-2b5bda07893c
Имя: Валюта
Тип: Строка
МаксимальнаяДлина: 50
Ресурсы:
-
Ид: 734935b9-5911-4087-b29d-409bebcf4943
Имя: Курс
Тип: Число
ДлинаДробнойЧасти: 4
МинимальноеЗначение: 0
-
Ид: 05e1f67e-c22a-4c5b-a5ee-6834e83bf46e
Имя: Кратность
Тип: Число
МинимальноеЗначение: 0
Структура КлючРазрешенийИзмерений
будет содержать измерение Валюта. Обработчик ВычислитьКлючиДоступаДляЧтения может выглядеть следующим образом:
@Обработчик
метод ВычислитьКлючиДоступаДляЧтения(
Ключи: ЧитаемыйМассив<КурсыВалют.КлючРазрешенийИзмерений>
): ЧитаемоеСоответствие<КурсыВалют.КлючРазрешенийИзмерений, ЧитаемыйМассив<КлючДоступа.Объект>>
// Даем права на чтение всех записей,
// где валюта не равна ADR
пер Результат = <КурсыВалют.КлючРазрешенийИзмерений, ЧитаемыйМассив<КлючДоступа.Объект>>{:}
для Ключ из Ключи
если Ключ.Валюта != "ADR"
Результат.Вставить(Ключ, [новый КлючДоступаДляВсех.Объект()])
;
;
возврат Результат
;
Событие ВычислитьКлючиДоступаДляЧтения
также вызывается в результате вызова метода ПересчитатьРазрешенияДоступаДляОбъектов()
. Поскольку этот метод позволяет пересчитать разрешения сразу для нескольких или для всех записей, первый параметр в обработчике ВычислитьКлючиДоступаДляЧтения
является массивом ключей измерений. Эти ключи измерений «Шина» формирует самостоятельно из переданных записей.