限制对特定角色的站点访问

时间:2013-03-10 20:25:39

标签: c# asp.net asp.net-mvc asp.net-mvc-4 simplemembership

我有3个角色:Registered Users, Approved Users, and Admins.
只有Approved usersAdmins.

才能访问该网站

要限制匿名访问,我在FilterConfig中添加了一个过滤器,如下所示:

filters.Add(new System.Web.Mvc.AuthorizeAttribute());   

现在,对于注册用户,我希望他们重定向到目标网页,说:

  

请与其中一位管理员联系以批准您。

我不确定这样做的正确方法是什么 我可以在每个控制器上设置authorize属性,但我不确定这是否是一个好方法 另外,我不确定在哪里根据角色指定默认重定向操作 我知道我可以在RouteConfig.cs中指定默认重定向操作,但不确定在何处指定角色。

2 个答案:

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