使用一个登录页的三个登录页面
问题描述:
已被困在这个几个小时,所以一些帮助将不胜感激!使用一个登录页的三个登录页面
我想有三个角色:一个“超级用户”谁可以在我的系统中,“管理员”谁可以做某些事情,只是一般的“用户”做的一切。
“用户”将不能进入系统,直到它们被“管理员”或“超级用户”的授权。
我建立了我的数据库,所有的角色都是有沿用户配置,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>
}
用户没有这些角色,那么,将永远不会看到这一点。
我如何再发谁是验证,但通过账户控制器无权单独页面的用户? –
这通过'Authorize'属性自动发生,但如果你想手动处理,或做一些非常具体的,你可以简单地检查用户是否是在一个特定的角色或没有('User.IsInRole(“角色”)' ),然后在条件中相应地重定向。您也可以创建自己的操作过滤器(通常从'AuthorizeAttribute'派生)来执行更多的自定义事务,然后使用那些而不是'Authorize'。这完全取决于你。所有的工具都在那里,你只需要利用它们。 –
我诚实地尝试了User.IsInRole(“角色”),没有一个,我什么都没有。我想我会尝试创建我自己的动作过滤器。感谢您的帮助,如果我能解决问题,我会尽快回复您。 –