asp.net中的權限管理-基於Forms的角色授權的基本步驟

下面是進行角色授權的幾個基本步驟:

1.設定身份驗證方式為Forms

应用程序根目录中的Web.config中做如下设置:

< authentication mode = " Forms " >  
    
< forms name = " .ASPXAUTH "  loginUrl = " /login.aspx "  protection = " All "  timeout = " 30 "  path =   " / " >
    
</ forms >  
</ authentication >

下面再對forms節點中的屬性做一些說明:
1>name: 指定完成身份验证的Http cookie的名称,默認值為.ASPAUTH,可以改成其它任意字串.
2>loginUrl: 如果未通过验证或超时后重定向的页面URL,一般为登录页面,让用户重新登录
3>Protection: 指定 cookie数据的保护方式.
  可设置为: All None Encryption Validation四种保护方式
  a. All表示加密数据,并进行有效性验证两种方式
  b. None表示不保护Cookie.
  c. Encryption表示对Cookie内容进行加密
  d. validation表示对Cookie内容进行有效性验证
4>TimeOut: 指定Cookie的失效时间,單位分鐘, 超时后要重新登录.
5>path:cookie保存的位置,設定cookie時用到的路徑要與其保持一致


2.進行身份驗證,並將角色信息保存在cookie中

     protected   void  Buttonlogin_Click( object  sender, System.EventArgs e)
      {
          
string  user  =   this .TextBox1.Text;  // 读取用户名
           string  password  =  TextBox2.Text;  // 读取密码
           if  (Confirm(user, password)  ==   true // confirm方法用来验证用户合法性的
          {
              
string  userRoles  =  UserToRole(user);  // 调用UserToRole方法来获取role字符串
              FormsAuthenticationTicket Ticket  =   new  FormsAuthenticationTicket( 1 , user, DateTime.Now, DateTime.Now.AddMinutes( 30 ),  false , userRoles,  " / " );  // 建立身份验证票对象
               string  HashTicket  =  FormsAuthentication.Encrypt(Ticket);  // 加密序列化验证票为字符串
              HttpCookie UserCookie  =   new  HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
              
// 生成Cookie
              Context.Response.Cookies.Add(UserCookie);  // 输出Cookie到客户端
              Context.Response.Redirect(Context.Request[ " ReturnUrl " ]);  //  重定向到用户申请的初始页面
          }
          
else
          {
              
//  用户身份未被确认时的代码
          }
      }
    
// 此方法用来验证用户合法性的
     private   bool  Confirm( string  user,  string  password)
    {
        
// 相应的代码
    }
    
// 此方法用来获得的用户对应的所有的role用逗号分割的一个字符串
     private   string  UserToRole( string  user)
    {
        
// 相应的代码
    }

 3.在服务端將角色恢复到GenericPrincipal对象中

在Global.asax中的Application_AuthenticateRequest事件中新增以下內容

  protected   void  Application_AuthenticateRequest( object  sender, System.EventArgs e)
    {
        
// 在這裡設定用戶的角色
        
        HttpApplication App 
=  (HttpApplication)sender;
        HttpContext Ctx 
=  App.Context;  // 获取本次Http请求相关的HttpContext对象
         if  (Ctx.Request.IsAuthenticated  ==   true // 验证过的用户才进行role的处理
        {
            FormsIdentity Id 
=  (FormsIdentity)Ctx.User.Identity;
            FormsAuthenticationTicket Ticket 
=  Id.Ticket;  // 取得身份验证票
             string [] Roles  =  Ticket.UserData.Split( ' , ' );  // 将身份验证票中的role数据转成字符串数组
            Ctx.User  =   new  GenericPrincipal(Id, Roles);  // 将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息
        }
    }

4.配置權限
方法1.在每個頁面的Page_Load中判斷角色,從而分配權限.

if ( HttpContext.Current.User.IsInRole(rolename) ) 

// 相应的代码

方法2.在web.config中配置權限

  1>對整個站點設定權限,在<configuration><system.web>節點下增加如下內容:

     < authorization >
      
< deny users = " ? " /><!-- 拒絕匿名訪問 -->
    
</ authorization >

  2>對目錄或單個文件設定權限,在<configuration>節點下新增以下內容:

  < location path = " admin " ><!-- 對admin目錄設定權限,也可對單個文件設定權限 -->
  
< system.web >
   
< authorization >
    
< allow roles = " Admin " />   <!-- 只有Admin才能访问admin目录 -->
    
< deny users = " * " />   <!-- 拒絕所有人訪問 -->
   
</ authorization >
  
</ system.web >
 
</ location >

方法3.在实体上封装,具体你可以看.text asp.netforums这些优秀项目的实现


 

你可能感兴趣的:(String,validation,asp.net,encryption,authorization,Forms)