Я занимаюсь разработкой простого пользовательского веб-приложения на основе ролей с использованием ASP.Net MVC. В своем действии по входу в систему я создаю сеанс профиля, как показано ниже:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
using (HostingEnvironment.Impersonate())
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
var employeeProfile = AccountBal.Instance.GetEmployee(loginId);
Session["Profile"] = employeeProfile;
FormsAuthentication.SetAuthCookie(model.UserName, true);
}
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", @"The user name or password provided is incorrect.");
return View(model);
}
}
И я проверяюэто или использование этого сеанса во всех действиях контроллера, как показано ниже:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateOrEdit(MyModel model)
{
var employee = (Employee) Session["Profile"];
if (employee == null)
return RedirectToAction("Login", "Account");
if (ModelState.IsValid)
{
// Functionality goes here....
}
}
Можно ли как-нибудь переместить этот фрагмент кода проверки сеанса в базовый класс или в централизованный класс?так что мне не нужно проверять его каждый раз в действиях контроллера, вместо этого я получу прямой доступ к свойствам
скажем,
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateOrEdit(MyModel model)
{
var employee = _profileBase.GetCurrentProfile();
if (employee == null)
return RedirectToAction("Login", "Account");
if (ModelState.IsValid)
{
// Functionality goes here....
}
}