2012-09-11 60 views
3

Visual Studio 2010 - MVC 3ASP.Net MVC 3 - 密码保护视图

我有我想限制访问的asp.net mvc应用程序的管理部分。该应用程序不会使用帐户,因此我不会使用管理员角色或用户授权访问权限。

我希望通过输入单个密码来访问该部分。本节将会有许多操作。我建立了一个管理控制器,它可以重定向到许多不同的视图,因此基本上这个控制器控制的任何视图都需要被限制。

我也喜欢它,所以只需输入一次会话密码,所以当浏览器关闭并重新打开时,密码将需要重新输入。

我该怎么做到这一点?

回答

16

假设你有一个名为Protected(如控制器)视图文件夹,你有几个动作指向一些意见,我会做到这一点:

  • 装点控制器/与行动筛选器操作,例如:[SimpleMembership]
  • 上行动过滤器,只检查是否存在和会话可变内容
  • 如果没有正确的
重定向到一个

代码:

public class SimpleMembershipAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //redirect if not authenticated 
     if (filterContext.HttpContext.Session["myApp-Authentication"] == null || 
      filterContext.HttpContext.Session["myApp-Authentication"] != "123") 
     { 
      //use the current url for the redirect 
      string redirectOnSuccess = filterContext.HttpContext.Request.Url.AbsolutePath; 

      //send them off to the login page 
      string redirectUrl = string.Format("?ReturnUrl={0}", redirectOnSuccess); 
      string loginUrl = "/Protected/SignIn" + redirectUrl; 
      filterContext.HttpContext.Response.Redirect(loginUrl, true); 
     } 
    } 
} 

和控制器

public class ProtectedController : Controller 
{ 
    [SimpleMembership] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult SignIn() 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult SignIn(string pwd) 
    { 
     if (pwd == "123") 
     { 
      Session["myApp-Authentication"] = "123"; 
      return RedirectToAction("Index"); 
     } 
     return View(); 
    } 
} 

,如果你想装饰整个controller,你需要之外将SignIn方法,以达到那里,你将需要认证。


的源代码:

可以下载简单MVC3解决方案http://cl.ly/JN6B或下跌随意查看GitHub的代码。

1

我会使用Forms身份验证。 ,然后将[授权]属性添加到您想要限制的控制器或单个操作。 然后,您将需要一种方法来登录等。 看Here表单上的信息认证希望可以帮助

你总是可以创建自己的认证系统,保存用户名和密码在配置文件或数据库或其他东西。您可以覆盖[Authorize]或创建您自己的操作筛选器,并按照您的意愿使用它。如果您不想进入完整表单身份验证。

+0

这正是我一直在寻找的,谢谢! – Zach