Хотя идея о том, что запросы к БД по каждому запросу неэффективны, верна, но помните, что производительность SELECT для правильно проиндексированных таблиц в современных БД является невероятно быстрой, поэтому сначала я бы предпринял некоторые измерения, чтобы убедиться, что этот сценарий действительно негативно влияет на производительность.по сравнению с теоретически может негативно повлиять на производительность на более позднем этапе.
Недостатком использования Session является не столько накладные (минимальные) издержки, сколько тот факт, что хранилище Session очень нарушает и не особенно надежно.Например, вы можете легко потерять сеанс и при этом иметь зарегистрированного пользователя.
Тем не менее, хороший способ посередине - кэшировать роли пользователя для каждого запроса с использованием коллекции HttpContext.Items.Это ограничит один SELECT на запрос, что, вероятно, является достаточно эффективным (см. Выше измерение), избегая при этом других проблем с хранением - таких как жирный, небезопасный файл cookie или какое-либо довольно серьезное нарушение решения на основе сеанса.