限制特定角色对站点的访问
本文关键字:站点 访问 定角色 | 更新日期: 2023-09-27 18:03:09
我有三个角色:Registered Users, Approved Users, and Admins.
只有Approved users
和Admins.
可以访问该站点
为了限制匿名访问,我在FilterConfig
中添加了一个过滤器,如下所示:
filters.Add(new System.Web.Mvc.AuthorizeAttribute());
现在,对于注册用户,我希望他们重定向到一个登陆页面,上面写着:
请联系管理员批准您。
我不知道怎么做才是正确的。
我可以在每个控制器上设置授权属性,但我不确定这是不是一个好方法。
另外,我不确定应该在哪里指定基于角色的默认重定向操作。
我知道我可以在RouteConfig.cs
中指定默认的重定向动作,但不确定在哪里指定角色。
StanK是正确的,拥有[Authorize]
属性将重定向所有未登录到登录页面的用户。这是你困境的一半。
从那里你需要改变你的logon
方法来检查一个新登录的用户是否有正确的角色(例如ConfirmedUser
)。这很棘手,因为User.IsInRole("ConfirmedUser")
在logon
方法中总是为假。这是因为User
对象是由http对象填充的,而http对象在下一次再循环之前不会被重新填充。幸运的是,您可以使用Roles.IsUserInRole(userName, "ConfirmedUser")
来检查用户是否具有正确的角色。
因此,在您的logon方法中,在验证用户之后,将用户注销并将其重定向到[AllowAnonymous]
方法,该方法通知他们尚未确认。
if (Roles.IsUserInRole(userName, "ConfirmedUser")
{
FormsAuthentication.SignOut();
return RedirectToAction("WarningMsg", "Home");
}
您应该能够为此使用[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();
}