Перейти к основному содержимому

Пересчет разрешений и экземпляров ключей

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

Пересчет разрешений доступа

Пересчет разрешений доступа требуется в следующих случаях:

  • Если вы изменили алгоритм вычисления разрешений для сущности в обработчиках следующих событий:

    • ВычислитьРазрешенияДоступа,
    • ВычислитьРазрешенияДоступаДляОбъектов,
    • ВычислитьКлючиДоступаДляЧтения,
    • ВычислитьКлючиДоступаДляИзменения.
  • Разрешения доступа объектов могут быть настроены таким образом, что будут зависеть от данных других объектов, используемых при вычислении разрешений. Если эти данные меняются, разрешения доступа следует явно пересчитывать.

Пересчет разрешений можно вызвать:

Когда требуется выполнять пересчет разрешений доступа для конкретных объектов, в параметр метода имя-сущности.ПересчитатьРазрешенияДоступаДляОбъектов() следует передавать массив этих объектов или массив данных расчета разрешений. При вызове метода без параметра будет выполнен пересчет разрешений для всех объектов, что нужно делать, как правило, только при изменении алгоритма расчета разрешений доступа.

При явном пересчете разрешений доступа объектов с помощью метода имя-сущности.ПересчитатьРазрешенияДоступаДляОбъектов() следует использовать его перегрузку, принимающую в качестве параметра Обходимое<имя-сущности.ДанныеРасчетаРазрешений>, а не Обходимое<имя-сущности.Ссылка>.

важно

Эта операция может занять длительное время, если, например, справочник содержит большое количество элементов. Рекомендуется придерживаться основных принципов построения собственной системы прав.

дополнительно

У периодического регистра сведений вызов этого метода приведет к вызову двух событий: ВычислитьКлючиДоступаДляЧтения и ВычислитьКлючиДоступаДляИзменения.

Пересчет экземпляров ключей доступа

Пересчет экземпляров ключей доступа требуется в следующих случаях:

  • Если вы изменили алгоритм выдачи экземпляров ключей в обработчиках событий имя-ключа-доступа.ПроверитьНаличиеКлючейДоступа. В этом случае необходимо выполнить пересчет этого ключа для всех пользователей в обработчике обновления проекта.

    Например, при изменении алгоритма проверки наличия ключа доступа КлючДоступаМенеджера:

    @ОбновлениеПроекта(Ид = "ИзменениеСпособаПроверкиНаличияКлючаДоступаМенеджера", Номер = 1)
    метод ИзменениеСпособаПроверкиНаличияКлючаДоступаМенеджера()
    КлючДоступаМенеджера.ПересчитатьКлючи()
    ;
  • Если изменился набор параметров у какого-либо ключа доступа в проекте. В этом случае при обновлении приложения таблица ключей пользователя будет очищена. Соответственно, нужно пересчитать экземпляры этого ключа доступа и разрешения, которые могли содержать экземпляры этого класса ключа доступа.

  • Если изменились данные, на которых основывается выдача экземпляров ключей тем или иным пользователям: принадлежность к той или иной роли, к тому или иному подразделению и т. д. Эти данные могут храниться в структурах, создаваемых другими элементами проекта, или во внешней системе.

Пересчет экземпляров ключей можно вызвать:

  • Для некоторых или для всех пользователей:

    Пользователи.ПересчитатьКлючиДоступа()
  • Для экземпляров определенного ключа, например для всех экземпляров ключа КлючиГруппСотрудников:

    КлючиГруппСотрудников.ПересчитатьКлючи()
  • Для конкретного экземпляра ключа (пересчитать экземпляр ключа для некоторых или для всех пользователей):

    пер КлючМенеджеров = новый КлючиГруппСотрудников.Объект(ГруппыСотрудников.Менеджеры)
    КлючМенеджеров.Пересчитать()
  • Для всех ключей доступа:

    для КлючДоступа из КлючиДоступа
    КлючДоступа.ПересчитатьКлючи()
    ;