我正在开发一个ASP.NET MVC 3应用程序,我正在使用Forms身份验证来处理所有登录功能。我创建了3个用户角色 - 经理,客户和导师,用户将根据他们的角色定向到不同的视图。在我编写角色之前,我的登录工作正常。这是我的控制器的代码:
public class AccountController : Controller
{
//
// GET: /Account/LogOn
public ActionResult LogOn()
{
return View();
}
[Authorize(Roles="Manager")]
public ActionResult Index()
{
return View();
}
[Authorize(Roles = "Tutors")]
public ActionResult TutorMain()
{
return View();
}
[Authorize(Roles = "Clients")]
public ActionResult ClientMain()
{
return View();
}
//
// POST: /Account/LogOn
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
if (User.IsInRole("Manager"))
return RedirectToAction("Index", "Account");
if (User.IsInRole("Tutors"))
return RedirectToAction("TutorMain", "Account");
if (User.IsInRole("Clients"))
return RedirectToAction("ClientMain", "Account");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
请帮我弄清楚为什么会这样。
谢谢, 艾米
答案 0 :(得分:0)
确保您的登录是所有相关角色的成员....即如果您只是“经理”的成员,那么如果您尝试查看需要“导师”的TutorMain(),系统会再次提示您“角色。
您可以为每个控制器指定多个角色,如下所示:
[Authorize(Roles="Manager")]
public ActionResult Index()
{
...
}
[Authorize(Roles = "Manager, Tutors")]
public ActionResult TutorMain()
{
return View();
}
如果这变得麻烦,那么调查“自定义”授权属性 - 如asp.net mvc Adding to the AUTHORIZE attribute
中所述