使用一个登录页面进行三次登录

时间:2017-06-22 15:35:19

标签: c# asp.net-mvc model-view-controller authorization

坚持了几个小时,所以一些帮助将不胜感激!

我希望有三个角色:一个可以在我的系统上执行所有操作的“超级用户”,一个可以执行某些操作的“管理员”,以及一般的“用户”。

“用户”在获得“管理员”或“超级用户”授权后才能访问系统。

我已经设置了我的数据库,所有角色都在UserProfile,webpages_Membership,Roles等中。

我想要一个登录页面。这三个角色都可以在那里登录,但我遇到的问题是可以立即注册并访问该网站的人。有没有办法限制谁可以登录,直到我可以为他们分配“用户”角色?

以下是我的帐户控制器的登录信息:

    [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

    //
    // POST: /Account/Login

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password))
        {
            return RedirectToLocal(returnUrl);
        }

        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }

我一直在玩[授权]和User.IsInRole(“用户”),但没有任何帮助。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您会混淆身份验证和授权的概念。任何活跃的用户都可以进行身份​​验证,并且没有任何问题。如果某人是新注册的并且在他们被授予之前登录"访问"对任何事情都没关系。应该简单地向他们展示一些消息,说他们还没有访问权限,或者被重定向到某个沙箱,而这些沙箱基本上没什么可以做的。

授权是一个完全独立的层。您授权站点的某些区域用于不同的角色,只有具有该角色的用户才能访问这些区域。您可以使用Authorize属性以及角色列表执行此操作。例如:

[Authorize(Roles = "Superuser,Admin")]
public ActionResult SensitiveAction()

现在只有这些角色的用户才能访问此操作。其他人都被拒绝了。此外,您可以根据角色隐藏链接等链接:

@if (User.IsInRole("Superuser") || User.IsInRole("Admin"))
{
    <a href="/admins/only">Admins Only!</a>
}

那些不在这些角色的用户将永远不会看到这一点。