使用一个登录页的三个登录页面

问题描述:

已被困在这个几个小时,所以一些帮助将不胜感激!使用一个登录页的三个登录页面

我想有三个角色:一个“超级用户”谁可以在我的系统中,“管理员”谁可以做某些事情,只是一般的“用户”做的一切。

“用户”将不能进入系统,直到它们被“管理员”或“超级用户”的授权。

我建立了我的数据库,所有的角色都是有沿用户配置,webpages_Membership,角色等

我希望有一个单一的登录页面。所有这三个角色都可以在那里登录,但我遇到了问题,可以直接注册并访问该网站。有什么方法可以限制谁可以登录,直到我可以为他们分配“用户”角色?

这里是我的账户控制器的登录:

[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(“用户”),但没有帮助。

任何帮助,非常感谢!

你混淆身份验证和授权的概念。任何活跃的用户都可以进行身份​​验证,并且没有任何问题。如果有人是新注册的并在他们被授予“访问权限”之前登录,那没问题。应该简单地向他们提供某种消息,说他们还没有访问权限,或者重定向到某个沙盒,而这些沙箱几乎没有他们能做的事情。

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

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

现在只有这些角色的用户才能访问此操作。任何人都被拒绝。此外,您还可以隐藏基于角色这些地区的联系和这样的:

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

用户没有这些角色,那么,将永远不会看到这一点。

+0

我如何再发谁是验证,但通过账户控制器无权单独页面的用户? –

+0

这通过'Authorize'属性自动发生,但如果你想手动处理,或做一些非常具体的,你可以简单地检查用户是否是在一个特定的角色或没有('User.IsInRole(“角色”)' ),然后在条件中相应地重定向。您也可以创建自己的操作过滤器(通常从'AuthorizeAttribute'派生)来执行更多的自定义事务,然后使用那些而不是'Authorize'。这完全取决于你。所有的工具都在那里,你只需要利用它们。 –

+0

我诚实地尝试了User.IsInRole(“角色”),没有一个,我什么都没有。我想我会尝试创建我自己的动作过滤器。感谢您的帮助,如果我能解决问题,我会尽快回复您。 –