У меня есть несколько разных типов пользователей (InternalUser
, Clinician
и Patient
), которые могут входить на мой веб-сайт, поэтому для каждого типа пользователей я создал пользовательский класс, унаследованный от ApplicationUser
.
Если авторизованный пользователь заходит на главную страницу веб-сайта (https://example.com/), тогда MVC код контроллера должен выяснить, какой это тип пользователя, чтобы он мог вернуть перенаправление на правильную «главную» страницу (https://example.com/clinician, https://example.com/patient и т. д. .).
Мне кажется разумным использовать заявку как простой и недорогой способ различать тип пользователя в контроллере без необходимости загружать текущего пользователя из базы данных. Когда я регистрирую пользователя, я добавляю утверждение, которое представляет "тип" пользователя:
await _userManager.AddClaimAsync("ihi:user_type", "clinician");
Затем в контроллере проверяю претензию:
[Authorize]
public IActionResult Index()
{
if (User.HasClaim("ihi:user_type", "clinician")) return Redirect("...");
if (User.HasClaim("ihi:user_type", "patient")) return Redirect("...");
if (User.HasClaim("ihi:user_type", "internal")) return Redirect("...");
throw new InternalErrorException("Logged in user is not in a recognized user role");
}
У меня есть пара вопросов по этой схеме:
- Это разумный подход?
- Эта схема (как атрибут
[Authorize]
, так и мои проверки утверждений) основывается на просмотре значения файла cookie. Безопасны ли данные, хранящиеся в этом файле cookie, от несанкционированного доступа? (Я бы на это надеялся, иначе злоумышленник может изменить cookie и сыграть в систему идентификации.)