網站建設中,會碰到最常用的使用者管理及操作許可權設定驗證,雖然這是很常見的一個管理操作,但要做得完善很不容易。最近參考了許多.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) ){}
關於許可權和驗證,就介紹到這裡,只能簡單介紹了。因實現的程式碼非常長,所以這裡只是介紹一種思維方式,具體實現每個人都會有自己特點。
使用者管理及操作許可權設定驗證寫出新思路
相關文章
- ORACLE使用者管理與許可權設定Oracle
- mysql 使用者管理和許可權設定MySql
- RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定MQ
- ubuntu 許可權管理設定Ubuntu
- MySQL 使用者及許可權管理?MySql
- MySQL使用者及許可權管理MySql
- mysql 8.0.21使用者及許可權操作MySql
- 使用者及檔案許可權管理
- mysql之許可權驗證MySql
- NAS使用者許可權的設定
- 如何為j2ee的程式設定許可權驗證?
- mysql 使用者及許可權管理 小結MySql
- MongoDB使用者許可權管理,設定密碼並連線MongoDB密碼
- Fake許可權驗證小例子
- 【許可權管理】Oracle中檢視、回收使用者許可權Oracle
- 使用者許可權設計(三)——通用資料許可權管理系統設計
- 如何設定許可權?
- mysql使用者許可權管理MySql
- 使用者物件許可權管理物件
- Oracle使用者許可權管理Oracle
- 選單許可權和按鈕許可權設定
- win10使用者許可權管理資料夾怎麼設定_win10資料夾完全控制許可權操作方法Win10
- 資料許可權技術驗證
- 資料許可權驗證MyBatis版MyBatis
- windows10管理員許可權怎麼設定_win10電腦設定管理員許可權的步驟WindowsWin10
- MySQL 使用者管理與許可權管理MySql
- Android許可權管理之Permission許可權機制及使用Android
- drf 許可權校驗設定與原始碼分析原始碼
- Atitit godaddy 檔案許可權 root許可權設定Go
- 使用RBAC模式寫許可權管理的設計要求模式
- windows10許可權怎麼設定_win10設定使用者許可權的方法WindowsWin10
- MongoDB 使用者與許可權管理MongoDB
- 使用者許可權系統管理
- Oracle使用者角色許可權管理Oracle
- MySQL使用者與許可權管理MySql
- Oracle使用者、許可權、角色管理Oracle
- MYSQL學習筆記13: DCL許可權控制(使用者許可權操作)MySql筆記
- Oracle 使用者許可權管理與常用許可權資料字典列表Oracle