Язык: C# Framework: ASP. NET Core MVC Цель: Сеть
Я создаю веб-приложение для медицинского персонала. Я использовал документацию Microsoft в качестве основы моей реализации. Авторизация на основе утверждений в ASP. NET Core
Разные сотрудники имеют разные уровни доступа, поэтому я ввел утверждения, чтобы запретить пользователю доступ к конфиденциальной информации путем ввода определенных параметров в URL. В двух словах. Я хочу, чтобы неавторизованный пользователь сделал следующее: https://..../Staff/Doctor/PatientInformation
Если у пользователя нет требуемой претензии, возникает исключение, и пользователю возвращается страница 403. Я хотел бы перенаправить пользователя на пользовательский ErrorView
.
Я считаю, что нужно улучшить взаимодействие с пользователем. Например, если пользователь неактивен в течение длительного времени. Приложение автоматически выйдет из системы по соображениям безопасности и если они вдруг получат ошибку. Они могут не осознавать, что для доступа к странице необходимо повторно войти в систему.
Вопрос: Как перенаправить пользователя в моем контроллере в пользовательское представление при возникновении исключения?
Мои политики:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("StaffNumber"));
options.AddPolicy("DoctorOnly", policy => policy.RequireClaim("UserID"));
options.AddPolicy("GeneralPractitionerOnly", policy => policy.RequireClaim("UserID"));
options.AddPolicy("PhysiotherapistOnly", policy => policy.RequireClaim("UserID"));
});
}
Мой контроллер :
[Authorize(Policy = "EmployeeOnly")]
public class StaffController : Controller
{
[Authorize(Policy = "DoctorOnly")]
public ActionResult DoctorResult()
{
return RedirectToAction("Doctor", "Staff");
}
[Authorize(Policy = "GeneralPractitionerOnly")]
public ActionResult GeneralPractitionerResult()
{
return RedirectToAction("Practitioner", "Staff");
}
[Authorize(Policy = "PhysiotherapistOnly")]
public ActionResult PhysiotherapistResult()
{
return RedirectToAction("Physio", "Staff");
}
}