我有3个角色:Registered Users, Approved Users, and Admins.
只有Approved users
和Admins.
要限制匿名访问,我在FilterConfig
中添加了一个过滤器,如下所示:
filters.Add(new System.Web.Mvc.AuthorizeAttribute());
现在,对于注册用户,我希望他们重定向到目标网页,说:
请与其中一位管理员联系以批准您。
我不确定这样做的正确方法是什么
我可以在每个控制器上设置authorize属性,但我不确定这是否是一个好方法
另外,我不确定在哪里根据角色指定默认重定向操作
我知道我可以在RouteConfig.cs
中指定默认重定向操作,但不确定在何处指定角色。
答案 0 :(得分:1)
StanK是正确的,拥有[Authorize]
属性会将所有未登录的用户重定向到登录页面。这是你的一半dillema。
从那里,您需要更改logon
方法,以检查新登录的用户是否具有正确的角色(例如ConfirmedUser
)。这很棘手,因为User.IsInRole("ConfirmedUser")
方法中logon
始终为false。这是因为User
对象由http对象填充,在下一个重新循环之前不会重新填充。幸运的是,您可以使用Roles.IsUserInRole(userName, "ConfirmedUser")
来检查用户是否具有正确的角色。
因此,在您的登录方法中,在对用户进行身份验证后,请将用户注销并将其重定向到[AllowAnonymous]
方法,该方法会通知他们尚未确认。
if (Roles.IsUserInRole(userName, "ConfirmedUser")
{
FormsAuthentication.SignOut();
return RedirectToAction("WarningMsg", "Home");
}
答案 1 :(得分:0)
您应该可以使用[Authorize]
属性。
受限制的网页将使用[Authorize(Roles="Approved User,Admin")]
修饰其控制器或操作,注册用户的“目标网页”为[Authorize(Roles="Registered User,Approved User,Admin")]
,登录操作将为[AllowAnonymous]
。
如果用户未获得授权,他们将被重定向到Account/Login
。您需要在此操作中构建一些逻辑,以重定向已登录到您的目标网页的“注册用户”。其他人应该只看到标准的登录页面。
修改强>
将“注册用户”从登录页面重定向到登录页面的逻辑看起来像这样
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
if (User.Identity.IsAuthenticated && Roles.IsUserInRole("Registered User"))
return RedirectToAction("LandingPage");
ViewBag.ReturnUrl = returnUrl;
return View();
}