坚持了几个小时,所以一些帮助将不胜感激!
我希望有三个角色:一个可以在我的系统上执行所有操作的“超级用户”,一个可以执行某些操作的“管理员”,以及一般的“用户”。
“用户”在获得“管理员”或“超级用户”授权后才能访问系统。
我已经设置了我的数据库,所有角色都在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(“用户”),但没有任何帮助。
非常感谢任何帮助!
答案 0 :(得分:0)
您会混淆身份验证和授权的概念。任何活跃的用户都可以进行身份验证,并且没有任何问题。如果某人是新注册的并且在他们被授予之前登录"访问"对任何事情都没关系。应该简单地向他们展示一些消息,说他们还没有访问权限,或者被重定向到某个沙箱,而这些沙箱基本上没什么可以做的。
授权是一个完全独立的层。您授权站点的某些区域用于不同的角色,只有具有该角色的用户才能访问这些区域。您可以使用Authorize
属性以及角色列表执行此操作。例如:
[Authorize(Roles = "Superuser,Admin")]
public ActionResult SensitiveAction()
现在只有这些角色的用户才能访问此操作。其他人都被拒绝了。此外,您可以根据角色隐藏链接等链接:
@if (User.IsInRole("Superuser") || User.IsInRole("Admin"))
{
<a href="/admins/only">Admins Only!</a>
}
那些不在这些角色的用户将永远不会看到这一点。