在某些会话检查条件下重定向到登录页面

时间:2009-05-24 12:20:10

标签: asp.net-mvc session

在使用MVC的C#中,我想编写一个公共实用程序或类,如果特定的conditoin失败需要重定向到登录页面。

例如:当用户登录网站时,userid将被添加到会话中。要访问“ManageUsers”页面,用户应以admin身份登录,否则我需要重定向到Login页面。我还需要在其他一些类似的页面中检查这种情况。我不想在登录时检查用户是管理员还是普通用户。我需要在普通班上检查一下。

任何建议?

3 个答案:

答案 0 :(得分:1)

这已经存在于具有授权属性的ASP.NET MVC中:

[Authorize(Roles="Administrators")]
public AcitonResult ManageUsers() {

 return View();

}

[Authorize(Users="Admin,SomeUser")]
public AcitonResult ManageUsers() {

   return View();

}

更多信息:
http://www.asp.net/learn/mvc/tutorial-17-vb.aspx

答案 1 :(得分:1)

[Authorize(Roles = "Admin")]
public ActionResult ManageUsersController()
{
    ...
}

在你的web.config检查中:

...
<forms loginUrl="~/your_login_page" defaultUrl="~/">
...

此外,您应该在web.config中设置MembershipProvider和RoleProvider

答案 2 :(得分:1)

实际上我认为这对于应用程序来说并不是特别好的行为。我认为您应该禁用(或隐藏)用户无法执行的任何操作。在用户手动输入URL或使用具有该权限的书签的情况下,显示错误消息而不是重定向到登录页面。

想象一下,您是登录应用程序的用户。您单击用户界面元素,看起来您已经注销。你无法知道你不应该使用它。禁用/隐藏元素可防止大多数用户出现此情况。重定向到错误会向用户提供有价值的反馈,告知用户为何所采取的操作不会产生预期效果。

我使用从AuthorizeAttribute派生的自定义属性来实现此效果。如果用户未登录,则会重定向到登录页面。如果他们已登录但没有足够的权限,则会显示合适的错误视图。