0

我有 3 个角色:Registered Users, Approved Users, and Admins.
该站点的访问权限仅适用于Approved usersAdmins.

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

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

现在,对于注册用户,我希望他们重定向到登录页面:

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

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

4

2 回答 2

1

StanK 是正确的,具有[Authorize]属性会将所有未登录的用户重定向到登录页面。那是你困境的一半。

从那里你需要改变你的logon方法来检查一个新登录的用户是否有正确的角色(例如ConfirmedUser)。这很棘手,因为在您的方法User.IsInRole("ConfirmedUser")中总是错误的。logon这是因为该User对象由 http 对象填充,直到下一次重新循环才会重新填充。幸运的是,您可以使用Roles.IsUserInRole(userName, "ConfirmedUser")来检查用户是否具有正确的角色。

因此,在您的登录方法中,在验证用户身份后,将用户注销并将他们重定向到[AllowAnonymous]通知他们尚未确认的方法。

if (Roles.IsUserInRole(userName, "ConfirmedUser")
{
                FormsAuthentication.SignOut();
                return RedirectToAction("WarningMsg", "Home");

}
于 2013-03-12T03:19:06.273 回答
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();
}
于 2013-03-10T22:39:35.697 回答