Помощник по кешированию в Blazor - PullRequest
0 голосов
/ 23 марта 2020

Я создаю приложение Blazor Server, и у меня есть несколько контроллеров Web API, где каждый метод должен проверять личность вызывающего абонента.

Каждый вызывающий объект передает UserId и GroupId через JWT и targetUserId как параметр вызова. Затем я проверяю, есть ли у этого пользователя разрешение на выборку данных для пользователей, которые находятся в той же группе, что и вызывающий. Если вызывающий абонент находится в той же группе, данные должны быть возвращены.

Это означает, что в начале каждого вызова Web API мне нужно будет сделать что-то вроде:

if (Database.GetGroup(targetUserId) == GroupId)
{
    return data;
}

I Я полагаю, что это неэффективно, так как для каждого метода GetGroup мне фактически потребуется несколько SQL объединений для достижения этой цели. И так как мои таблицы будут обновляться довольно часто, я беспокоюсь, что все эти групповые поиски приведут к взаимоблокировкам.

Моя идея сейчас такова, что пользователь фактически никогда не меняет группу. Как я могу при запуске приложения создать список <> всех пользователей и их групп, аналогично кешу? Это живет для всего исполнения моего приложения Blazor Server? Тогда я мог бы сделать:

if (GroupIdCache(targetUserId) == GroupId)
{
    return data;
}

Если пользователь был добавлен после того, как этот список был построен, группа не будет найдена, и сначала я попытаюсь обновить список sh, а если не найден, вернуть ошибка.

Альтернативным способом было бы добавить для всех моих SQL операторов по всему приложению ".. И ГДЕ GroupId = @GroupId", но я думаю, что проверка ограничений безопасности еще до прохождения SQL код является лучшей альтернативой. Плюс ко всему, мне нужно присоединиться к этому столу повсюду.

...