Пересчет разрешений и экземпляров ключей
При самостоятельном формировании разрешений и экземпляров ключей необходимо поддерживать их актуальность. Существует перечень ситуаций, в которых необходимо обеспечить их обновление.
Пересчет разрешений доступа
Пересчет разрешений доступа требуется в следующих случаях:
-
Если вы изменили алгоритм вычисления разрешений для сущности в обработчиках следующих событий:
ВычислитьРазрешенияДоступа,ВычислитьРазрешенияДоступаДляОбъектов,ВычислитьКлючиДоступаДляЧтения,ВычислитьКлючиДоступаДляИзменения.
В этом случае необходимо выпо лнить пересчет разрешений доступа для этой сущности в обработчике обновления проекта. Например, при изменении алгоритма расчета разрешений доступа регистра сведений КурсыВалют:
@ОбновлениеПроекта(Ид = "ИзменениеСпособаРасчетаРазрешенийДоступаДляКонтактнойИнформации", Номер = 1)
метод ИзменениеСпособаРасчетаРазрешенийДоступаДляКонтактнойИнформации()
КурсыВалют.ПересчитатьРазрешенияДоступа()
КурсыВалют.ПересчитатьРазрешенияДоступаДляОбъектов()
;
-
Если вы добавили в проект новые элементы, для которых поддерживается управление доступом (HTTP-сервис и т. д.). В этом случае необходимо выполнить пересчет разрешений доступа для этих сущностей в обработчике обновления проекта. Например, при добавлении в проект новых регистров сведения КурсыВалют и ЦеныТоваров:
@ОбновлениеПроекта(Ид = "ДобавлениеПодсистемыПродаж", Номер = 1)
метод ДобавлениеПодсистемыПродаж()
КурсыВалют.ПересчитатьРазрешенияДоступа()
ЦеныТоваров.ПересчитатьРазрешенияДоступа()
;
-
Разрешения доступа объектов могут быть настроены таким образом, что будут зависеть от данных других объектов, используемых при вычислении разрешений. Если эти данные меняются, разрешения доступа следует явно пересчитывать.
Пересчет разрешений можно вызвать:
-
Для одного элемента проекта, например регистра сведений КурсыВалют:
КурсыВалют.ПересчитатьРазрешенияДоступа() -
Для всех элементов проекта или для всех их элементов данных, например для всех регистров сведений:
для Регистр из РегистрыСведений
Регистр.ПересчитатьРазрешенияДоступа()
; -
Для всех или некоторых объектов одного элемента проекта, например для всех записей регистра КурсыВалют:
КурсыВалют.ПересчитатьРазрешенияДоступаДляОбъектов()
Когда требуется выполнять пересчет разрешений доступа для конкретных объектов, в параметр метода имя-сущности.ПересчитатьРазрешенияДоступаДляОбъектов() следует передавать массив этих объектов или массив данных расчета разрешений. При вызове метода без параметра будет выполнен пересчет разрешений для всех объектов, что нужно делать, как правило, только при изменении алгоритма расчета разрешений доступа.
При явном пересчете разрешений доступа объектов с помощью метода имя-сущности.ПересчитатьРазрешенияДоступаДляОбъектов() следует использовать его перегрузку, принимающую в качестве параметра Обходимое<имя-сущности.ДанныеРасчетаРазрешений>, а не Обходимое<имя-сущности.Ссылка>.
Эта операция может занять длительное время, если, например, справочник содержит большое количество элементов. Рекомендуется придерживаться основных принципов построения собственной системы прав.
У периодического регистра сведений вызов этого метода приведет к вызову двух событий: ВычислитьКлючиДоступаДляЧтения и ВычислитьКлючиДоступаДляИзменения.