<< Click to Display Table of Contents >> Разработка > Рекомендации по разработке для масштабируемых систем > Оптимизация длительных процессов Назначение прав группе пользователей (экземплярные права) |
![]() ![]() |
Если в базе данных разрастается количество записей с правами доступа, то увеличивается время на выполнение запроса к таблицам с этими записями. В зависимости от ситуации откажитесь от выдачи экземплярных прав или используйте событие UI-фильтрация (UIFiltering) для доступа к записям списка. Это оптимизирует работу системы, если нужно, например, массово отправить подзадачу или выдать доступ к задаче сотрудникам с правами на вложенный документ.
Пример 1. Массовая отправка подзадачи сотрудникам
Ситуация
В некоторых задачах сотрудникам автоматически назначаются права на вложенный документ.
Например, разработана задача на ознакомление. По ней массово отправляются подзадачи сотрудникам всех подразделений компании и автоматически выдаются права на организационно-распорядительный документ. По одной подзадаче может быть выдано 50-100 прав доступа в зависимости от численности сотрудников в подразделении, а документ при этом вложен в сотни подзадач (по числу подразделений). Суммарное количество прав может превышать 3000.
В результате списки документов в системе открываются длительное время. Права на панели «Управление доступом» также отображаются с замедлением. Это происходит из-за того, что в базе данных разрастается таблица с правами доступа, и время выполнения запросов к ней увеличивается.
Решение
В такой ситуации рекомендуется назначать права на документ не каждому пользователю отдельно (экземплярные права), а сразу группе сотрудников, например роли или подразделению. Для этого можно использовать разрешения, настройку прав доступа на типы объектов и правила назначения прав.
Например, так реализована выдача прав на вложенный документ в задаче на ознакомление. При отправке задачи исполнители автоматически получают права на вложенный документ. Если в поле *Участник указана роль, а в поле Кроме – сотрудник из этой роли, то права на документ ему все равно назначаются, так как он является участником роли. При этом задание на ознакомление исключенному из задачи сотруднику не приходит.
Пример 2. Доступ к задаче для сотрудников с правами на вложенный документ
Ситуация
Предположим, разработан справочник «Сообщения». В его записях хранится информация о задачах, отправленных по документу, и заданиях по этой задаче. Так сотрудники с правами на документ могут получить информацию о задачах, даже если не являются их участниками. В качестве способа авторизации указано значение Для типа и экземпляра сущности.
При отправке задачи по документу в справочнике создается новая запись. На нее выдаются права тем сотрудникам, у которых есть доступ к вложенному в задачу документу.
Таким образом, для одного документа создаются десятки записей в справочнике. С увеличением количества документов разрастается число записей. Также увеличивается количество записей с правами доступа в таблице базе данных. Оно становится равным количеству задач по документу, умноженному на число прав на этот документ.
В результате в системе замедляется открытие списка сущностей. Кроме этого, наблюдаются пики потребления оперативной памяти при программной работе с сущностью.
Решение
Для оптимизации работы с сущностями рекомендуется:
•выдавать права на документ и на запись справочника не каждому сотруднику отдельно, а группе пользователей;
•вместо выдачи прав на записи справочника используйте событие UI-фильтрация.
© Компания Directum, 2024 |