在路线之前

时间:2014-12-08 12:42:41

标签: asp.net-mvc

所以在我的.net应用程序中我有三个控制器

  1. 主页
  2. 厨房
  3. 机构
  4. 当用户登录时,我会得到用户可以使用的控制器。我已经定义了一些角色并使用了那些用户需要去哪里的角色。

    因此,例如,如果用户Bob是厨师。当Bob登录时,他被带到厨房仪表板。但是如果Bob在URL ../Home/Dashboard中输入内容,就没有什么能阻止他进入那里了。应该怎么做以限制Bob访问任何其他网址?

    此外,当用户登录时,我应该在会话中存储有关其角色的信息吗?

    为此目的的最佳做法是什么?

1 个答案:

答案 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*/);
}