所以在我的.net应用程序中我有三个控制器
当用户登录时,我会得到用户可以使用的控制器。我已经定义了一些角色并使用了那些用户需要去哪里的角色。
因此,例如,如果用户Bob是厨师。当Bob登录时,他被带到厨房仪表板。但是如果Bob在URL ../Home/Dashboard中输入内容,就没有什么能阻止他进入那里了。应该怎么做以限制Bob访问任何其他网址?
此外,当用户登录时,我应该在会话中存储有关其角色的信息吗?
为此目的的最佳做法是什么?
答案 0 :(得分:1)
您可以在HttpPost登录操作中处理所有要求。请参阅评论以获取进一步的指导。
[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginModel model, string returnUrl)
{
// check first for field validations
if (!ModelState.IsValid)
return View(model);
// validate user agains database
var user = FindUser(model.UserName, model.Password);
if (user == null)
{
ModelState.AddModelError("", "Invalid username or password.");
return View(model)
}
// user is valid, sign in assuming forms authentication, however it's
// best practice to abstract following statement by use of some kind of authentication
// manager (refer to OWIN framework for a better approach).
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
// when returnUrl param is provided
if (!String.IsNullOrEmpty(returnUrl))
return Redirect(returnUrl);
// following 'if' - condition dependent on your domain models.
if (user.IsCook)
return RedirectToRoute(/*kitchen route*/);
else
return RedirectToRoute(/*dashboard*/);
}