借鉴别人的代码,自己整理下

有些代码不是很清楚,先记录一下

1.首先设置web.config

(1)把authentication的mode改为forms,原来默认的应该是windows,同时设置登录页面

<authentication mode="Forms">
  <forms loginUrl="login.aspx" name=".ASPXAUTH"></forms>
</authentication>

(2)设置权限目录

    location这个目录和system.web是同一级目录,path为设置权限的目录,即为指定该目录下文件的访问权限

<location path="User">
  <system.web>
    <authorization>
      <allow roles="user"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

(可以设置多个location,这样可以设置多个文件夹下目录的权限)

2 .登录页面设置

   (1)验证方法

/// <summary>
/// Set information for authentication
/// </summary>
/// <param name="username">Username</param>
/// <param name="roles">Roles</param>
private void SetAuthentication(string username, string roles)
{
  // Create a new ticket used for authentication
  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1, // Ticket version
    username, // Username associated with ticket
    DateTime.Now, // Date/time issued
    DateTime.Now.AddMinutes(60), // Date/time to expire
    false, // "true" for a persistent user cookie
    roles, // User-data, in this case the roles
  FormsAuthentication.FormsCookiePath);// Path cookie valid for

  // Encrypt the cookie using the machine key for secure transport
  string hash = FormsAuthentication.Encrypt(ticket);
  HttpCookie cookie = new HttpCookie(
    FormsAuthentication.FormsCookieName, // Name of auth cookie
    hash); // Hashed ticket

  // Set the cookie's expiration time to the tickets expiration time
  if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;

  // Add the cookie to the list for outgoing response
  HttpContext.Current.Response.Cookies.Add(cookie);
}

  (2)登录

   if(验证成功)

    SetAuthentication(uname, "user");//第一个为名字,第二个为角色

3.Global.asax设置

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
  if (HttpContext.Current.User != null)
  {
    if (HttpContext.Current.User.Identity.IsAuthenticated)
    {
      if (HttpContext.Current.User.Identity is FormsIdentity)
      {
        FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
        FormsAuthenticationTicket ticket = id.Ticket;

        // Get the stored user-data, in this case, our roles
        string userData = ticket.UserData;
        string[] roles = userData.Split(',');
        HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
      }
    }
  }
}

经测试可以使用,设置权限的文件夹下必须为允许的角色能够打开,起到了分文件夹权限的作用

暂时不知道优缺点。