если этот вопрос как-то не по теме, дайте мне знать. Я возьму его в другом месте, но я хотел бы получить некоторые идеи о том, как выполнить что-то в рамках существующего проекта.Можно ли кэшировать авторизацию в ASP.NET MVC & Identity 2.0?
Мое веб-приложение (с использованием ASP.NET MVC 5 и ASP.NET Identity 2.0) выполняет авторизацию (через эти причудливые атрибуты Authorize
) с помощью настраиваемого поставщика роли. Каждая проверка полномочий (например, Authorize(Roles = "Admin")
) требует запросов к базе данных для выполнения следующих действий:
- Получить текущий «семестр» (проверить, что диапазон дат текущая дата & время попадает в) из
Semesters
таблицы - Get позиция с именем «Admin» из таблицы
Positions
- Проверьте, существует ли запись в таблице
Leaders
, содержащей текущий идентификатор пользователя, полученный идентификатор семестра и полученный идентификатор позиции.
Если запись существует, пользователь авторизован, в противном случае это не так. Чтобы быть понятным, назначение роли привязано к семестру, чтобы ограничить соответствующие привилегии продолжительностью семестра. I.e., как только семестр заканчивается, пользователь больше не имеет своих полномочий, но следующий человек, назначенный на следующий семестр, немедленно получит их.
Большинство моих пользователей попадают в роли, которые проверяются на подавляющем большинстве страниц, которые они посещают, но не все. Все эти шаги выполняются каждый раз, когда мне нужно авторизоваться.
Вот изображение базы данных просто чтобы понять:
Есть ли способ в кэш (так что я не должен постоянно запрашивать базу данных) эти разрешения на длительное время эквивалентно времени с момента, когда проверка сначала выполняется/кэшируется до конца семестра? Или просто кешируйте их вообще за любое количество времени, которое разумно? В идеале, если по какой-либо причине обновляется семестр или позиция, авторизации каким-то образом становятся недействительными и повторно кэшируются. И, наконец, настраиваемый RoleProvider - прочный способ сделать это?
Стоит отметить, что с точки зрения безопасности эти данные не хранятся в открытом тексте. Они хранятся в зашифрованном виде, как ASP.NET_SessionId = fegias ...; .AspNet.ApplicationCookie = QPHpjno5QPgbpt ... –