答案 0 :(得分:1)
ASP.NET MVC Web应用程序的身份验证,授权和身份相关问题的最完整解决方案是身份2 。
由于您只需要一个简单的身份验证和授权,因此您的案例可能有点过分,但我强烈建议您尽快开始学习身份2,因为它会在更复杂的场景中为您提供巨大的优势(从社交, 2因素认证,索赔等。)。
检查此article及以下内容:在我看来,这些是学习身份2的最佳方式。
这可能很难理解,你需要超过10分钟,但请相信我:这是一项很好的投资!
答案 1 :(得分:0)
我做了类似这样的事。
Role
表和一个User
表。这是解决方案。我在用户控制器中添加了一个登录视图,并为admin和user声明了会话。
[HttpPost]
public ActionResult Login(Models.User user)
{
var query = db.Users.Where(q => q.UserName == user.UserName && q.Password == user.Password);
if (ModelState.IsValid)
{
Session["uname"] = user.UserName;
if (query.Any())
{
if (query.FirstOrDefault().Role.Role1.ToLower() == "admin")
{
Session["admin"] = true; //define admin session here
return RedirectToAction("Index", "user");
}
else
{
Session["uname"] = true;
return RedirectToAction("Details", "user", new { id = qery.FirstOrDefault().Id });
}
}
}
return View(user);
}
如果有人以用户身份登录,那么他可以查看自己的详细信息并进行编辑。如果有人以 admin 身份登录,那么他可以查看所有用户的详细信息并拥有完全的权限。
public ActionResult Index()
{
var users = db.Users.ToList();
var session = Session["uname"];
if (Session["admin"] == null) //if admin is null
{
return RedirectToAction("Login", "User"); //admin redirected at login page
}
else if (Session["admin"] != null) //if admin is not null and its set to admin then
{
return View(users.ToList()); //he can see private data
}
else
{
//if user is login and he tried to redirected page to user
//information
//for eg:user/details/2
//then he tried to access private data then
//for eg :user
//then this following url will restrict the user
//andredirect to Logout Page
return RedirectToAction("About", "Home");
}
}