Отключение проверки прав доступа
<< Click to Display Table of Contents >> Разработка > Рекомендации по разработке для масштабируемых систем > Быстродействие операций Отключение проверки прав доступа |
При получении данных с сервера выполняется проверка прав доступа. Как правило, она занимает время и при этом иногда является избыточной.
Например, при старте задачи на согласование документа выполняется поиск заданий в работе, в которые вложен этот документ. Если задания есть, то появляется предупреждение о том, что документ уже на согласовании. В такой ситуации при поиске сначала проверяются права доступа на вложения. Если задачу стартует руководитель, то проверяются еще права всех сотрудников, которых он замещает. В результате в базу данных отправляется сложный запрос, создается нагрузка на систему, и задача стартует медленно.
В этом примере проверка прав избыточна, так как пользователь напрямую не обращается к заданиям, в которые вложен документ. В системе только проверяется, можно ли отправить на согласование документ.
Чтобы упростить запрос к базе данных и ускорить выполнение операции, в такой ситуации можно отключить проверку прав. Для этого код на получение данных «оборачивается» в метод AllowRead().
Примечание. Метод AllowRead() позволяет программно извлекать информацию, на которую у пользователя нет прав доступа. Используйте метод, только если у пользователя есть полномочия на просмотр полученной информации. Например, если он может просматривать статистику в виджетах или сумму по всем входящим счетам.
Пример
Проверить, созданы ли по документу задания на обработку. Для ускорения поиска заданий отключить проверку прав доступа.
/// <param name="task">Текущая задача.</param>
/// <param name="document">Документ.</param>
/// <returns>True, если по документу уже созданы задания на обработку за рамками
/// текущей задачи.</returns>
[Remote(IsPure = true)]
public virtual bool HasOtherDocumentProcessingAssignments(ITask task, IOfficialDocument document)
{
var hasDocumentProcessingAssignments = false;
Sungero.Core.AccessRights.AllowRead(
() =>
{
hasDocumentProcessingAssignments = this.GetOtherDocumentProcessingAssignments(task, document).Any();
});
return hasDocumentProcessingAssignments;
}
© Компания Directum, 2024 |