Вычисление разрешений доступа для периодических регистров сведений
- ВычислитьКлючиДоступаДляЧтения,
- ВычислитьКлючиДоступаДляИзменения.
создает разрешения автоматически, а от вас требуется только сформировать в обработчике набор экземпляров ключей, которые надо записать в конкретное разрешение.
Событие «ВычислитьКлючиДоступаДляЧтения»
Особенность этого события заключается в том, что создает разрешение доступа не для одной записи, а для всех записей регистра с одинаковыми значениями измерений, перечисленных в настройке РасчетИзмеренийПо. Для этого используется тип имя-регистра-сведений.КлючРазрешенийИзмерений (подробнее).
ВидЭлемента: РегистрСведений
Ид: 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"
Результат.Вставить(Ключ, [новый КлючДоступаДляВсех.Объект()])
;
;
возврат Результат
;
Событие «ВычислитьКлючиДоступаДляИзменения»
Обработчик события ВычислитьКлючиДоступаДляИзменения по своему смыслу ничем не отличается от обработчика ВычислитьРазрешенияДоступаДляОбъектов. На вход он получает массив записей, для которых нужно создать разрешения.
Отличие заключается лишь в том, что, так как право всего одно — Изменение, вам не нужно создавать разрешение, сделает это самостоятельно. Достаточно лишь вычислить экземпляры ключей, которые надо записать в разрешение той или иной записи.
Например, обработчик этого события может выглядеть следующим образом:
@Обработчик
метод ВычислитьКлючиДоступаДляИзменения(
Элементы: ЧитаемыйМассив<УчетнаяПолитикаОрганизаций.ДанныеРасчетаРазрешений>
): ЧитаемоеСоответствие<УчетнаяПолитикаОрганизаций.ДанныеРасчетаРазрешений, ЧитаемыйМассив<КлючДоступа.Объект>>
знч Результат = <УчетнаяПолитикаОрганизаций.ДанныеРасчетаРазрешений, Массив<КлючДоступа>>{:}
для Элемент из Элементы
если Элемент.Период > ПолучитьДатуЗапретаРедактирования()
Результат.Вставить(Элемент, [КлючДоступаОрганизации.Получить(Элемент.Организация)])
;
;
возврат Результат
;