淺談ASP.NET的許可權管理和使用者驗證

來源:互聯網
上載者:User
asp.net

網站建設中,會碰到最常用的使用者管理及操作使用權限設定驗證,雖然這是很常見的一個管理操作,但要做得完善很不容易。最近參考了許多.NET方面的書,特別關心這方面的,並結合自己特點,摸索了一下適合自己的使用者管理方法,完成了基本管理類庫。
  
  使用者的管理方法,在設計時採取“使用者——角色——許可”三級,這是WINDOWS作業系統的使用者管理方法。一個使用者可以有多個角色,一個角色也可以有多個許可。
  
  所以有資料庫設計時分別設計:
  
  使用者表:設UserID、使用者名稱、使用者資訊
  角色表:設RoleID、CategoryID、RoleName、Description
  使用者角色表:UserID、RoleID
  
  分類表:CategoryID、CategoryName、Description
  許可表:PermissionID、CategoryID、PermissionName、Description
  角色許可表:RoleID、PermissionID
  
  設計好資料庫後,即可以從事設計使用者、角色、許可的類。類庫分資料層類,完成建立、查詢、刪除、更新等操作。業務層的類,需要實現與資料無關功能,建立如使用者擁有角色、許可的列表,驗證方式等。
  
  在業務層有一很重要的方法,即是用.NET的驗證方式來實現,因此建立二個類:
  
  一是 SiteIdentity 類,它繼承自業務層基類,並採用System.Security.Principal.IIdentity介面。該類主要存放使用者的基本資料,包括使用者名稱、EMAIL及ID號、密碼。它的方法較簡單,通過驗證後,把使用者的基本資料。
  
  二是 HelloseaPrincipal 類,它也繼承業務基類,採用System.Security.Principal.IPrincipal介面。該類的主要方法有驗證類,並把驗證後的使用者資訊、使用者角色列表、許可列表格儲存體到類中。該類中有二個方法和一個Property是IIdentity介面必須的,即IsInRole、HasPermission,和System.Security.Principal.IIdentity Identity。
  
  設計完成類庫後,即可以用來驗證使用者了。比如在管理登入頁面中,需要判斷使用者的密碼是否正確,並判斷使用者是否有許可進入管理頁面。
  
  下面是驗證中的一段:
  
  HelloseaPrincipal admin = HelloseaPrincipal.ValidateLogin(txtAdminName.Text,                                   txtPassword.Text);

      if (admin == null)      {

        labInfo.Text = "沒有該管理員帳號,或輸入密碼不正確。";

      }      else if ( !admin.HasPermission(1) )      { 

       labInfo.Text = "您並不是管理角色並且沒有管理許可,不能進入本系統。";

      }      else      {

        Context.User = admin;

        FormsAuthentication.SetAuthCookie(txtAdminName.Text, true);

        Response.Redirect("AdminIndex.aspx");

      }


  註:!admin.HasPermission(1)的1是資料庫中許可的ID號
  
  在內部頁面中可以用:
  
  HelloseaPrincipal currentPrincipal = (HelloseaPrincipal)Context.User;

      if (!currentPrincipal.HasPermission(1))      {

      }
  這樣方法來驗證使用者,雖然它也是通過Cookie,但.net中的Cookie是加密的,能實現很高的安全性

  這樣的設計還有個缺點,即是許可的ID號是固定值。考慮到一般的管理頁面需要的許可比較固定,所以採用把許可設定在config檔案中。而一些頻道等需要經常變化的驗證許可放置在資料庫的頻道表中。下面是我採用的config檔案中設定方法實現,不詳細介紹如何讀取和寫入了。從config檔案讀取和寫入可採用XML序列化和反序列化很容易實現,可以用類來封裝,並且在使用時非常方便,下面的語句即是通過封裝類中讀取許可的方法:
  
  if ( !admin.HasPermission(OperatePermissionConfig.GetSettings().ManagerLogin) ){}
  關於許可權和驗證,就介紹到這裡,只能簡單介紹了。因實現的代碼非常長,所以這裡只是介紹一種思維方式,具體實現每個人都會有自己特點。

 



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。