在基于Web的應用系統中,經常要用到權限的管理和控制,本文主要探討的是基于用戶組的權限管理和控制,并采用XML的文檔來描述它,存儲有關信息。XML的文檔的通用性使得其中的數據信息可以被方便地共享和編輯。由于Web系統常常面向的是多個用戶,每一類用戶又擁有對系統的不同層次的訪問權限。我們把具有相同訪問權限的、邏輯上相一致的用戶集合稱為用戶組。

Web系統平臺的用戶群體可以被劃分為多個具有不同權限的用戶組,用戶的權限可分為:可讀(權限標識:1)、可讀寫(權限標識:2)、管理控制(權限標識:3)。它們代表了用戶在系統中扮演的不同角色以及行為限制。據此,可以將用戶組劃分為三個等級:第一等級,超級用戶組具有完全控制的權限,可以配置管理各個欄目,管理各個用戶和用戶組,配置系統的總體設置等;第二等級,各分欄目或模塊管理員組,這些組的用戶特點是擁有對某一欄目或模塊管理控制的權限;第三等級,普通用戶組,擁有對授權欄目的可讀權限或可讀寫權限。根據不同的用戶組(權限)和不同平臺資源之間的映射關系,可以建立一個基于XML的文檔來描述它。







      ……

           5

           6

……





……

           5

           11

12

13

47

……



……



        ……

9

……



……



在上面的XML文檔中,對各個用戶組的訪問控制權限進行了精確的控制。節點代表了一個用戶組,屬性id的值是該組的在系統內的標識。節點下的各子節點表示了該用戶組可以訪問的欄目或模塊,屬性power的值是對該欄目或模塊訪問的權限標識。節點下的文本節點內容是該欄目或模塊在系統中的標識。例如,標識為2的用戶組(在系統中代表某分欄目或模塊管理員組),它對標識為11的欄目(或模塊)具有標識為1的權限(在系統中定義為可讀);而對標識為5的欄目(或模塊)具有標識為3的權限(在系統中定義為管理控制)。同理,標識為1的用戶組(在系統中代表普通用戶組),它對標識為5的欄目(或模塊)具有標識為1的權限(在系統中定義為可讀)。

在權限認證模塊中,通過讀取XML配置文件和數據庫中的數據,可以判斷對指定欄目的訪問權限。

權限認證函數為:

bool AssertPower(string userGroupID,string ClassID,string OperareID)

userGroupID:當前用戶用戶組的id;

ClassID:用戶正要訪問的欄目或模塊;

OperareID:當前用戶要進行的操作:1:代表讀;2:代表寫;3:代表管理控制

返回值為true表示通過驗證;返回值為false表示通過未驗證。

具體代碼如下:

//引入命名空間,使程序可以訪問XML類

using System.Xml;

using System.Xml.Schema;

……

XmlDocument doc=new XmlDocument();

XmlNode node,subnode;

//載入配置文件

string xmlFile=Server.MapPath("powercontrol.xml");

doc.Load(xmlFile);

node=doc.DocumentElement.FirstChild;

//遍歷各個節點

while (node!=null)

{

//查找當前用戶所屬用戶組的節點, userGroupID為當前用戶用戶組的id

if (userGroupID==node.Attributes.Item(0).FirstChild.InnerText)

{

     subnode=node.FirstChild;

//遍歷各個子節點

while (subnode!=null)

{

//查找用戶所訪問欄目的節點(ClassID為用戶正要訪問的欄目或模塊)

if(subnode.InnerText==ClassID)

{

      flag=true;

      break;

     }

        subnode=subnode.NextSibling;

}

}

if(flag) break;

node=node.NextSibling;

}

if(!flag)

{

//沒有訪問的權限,拒絕訪問

return false;

……

}

else

{

//有訪問的權限

PowerID=subnode.Attributes.Item(0).FirstChild.InnerText;

// PowerID為1表示可讀;PowerID為2表示可讀寫;PowerID為3表示管理控制。

……

int PID=(int) PowerID;

//判斷當前要進行的操作是否符合對應的權限要求

if(OperareID<= PID)

{

//符合權限要求,允許訪問

return true;

}

else

{

 //不符合權限要求,拒絕訪問

return false;

}

}

 

通過從userGroupID獲取當前訪問用戶的用戶組標識,從ClassID獲取當前正在訪問的欄目或模塊的ID,查找配置文件,取得對該欄目或模塊的訪問權限與將要進行的操作進行比較,并做出判斷。

由于該方案是基于用戶組,所以可引入新的用戶組來配置的不同的權限組合,也可以對該用戶組內的各個子節點(代表的欄目或模塊)的訪問權限等級進行精確控制。同時根據需要可以擴展訪問權限等級(如將現在定義的三級別權限定義為四級或五級)和增加系統的欄目或模塊。

文章檢索    


編程>熱門文章

·VB中串口通訊的實現
·Visual C++技巧問答
·用ASP.NET打造個人留言本
·心鈴回音(2003-2)
·心鈴回音(2003-1)
·ASP.NET上傳文件到數據庫
·GDI+與GDI屏幕抓圖比較
·埃及祖瑪游戲編程模擬
·一步一步開發CHM在線幫助文件系統-1
·用Java存取SQL2000中的圖片
·在Visual C++中實現一個DLL木馬
·用Delphi實現通用的定時自動關機程序
·一步一步開發CHM在線幫助文件系統-3
·VC編程處理數據文件的一些體會
·用VB.NET制作Office XP風格的工具欄
·用VB編寫從目標文件中提取圖標的程序
·VB使用WinSock設計網絡五子棋
·財經網站股票成交數據批量下載的VB實現
·Ado.net與T-SQL快速搭建ERP筐架
·一步一步開發CHM在線幫助文件系統-2
·在VB中設計豐富的圖片轉場效果
·利用屬性編輯器在程序運行中設定數據庫連接
·ASP.NET 開發實例之博客系統(2)--用戶管理
·ASP.NET 開發實例之博客系統(一)
·用VB.NET開發Office XP樣式的窗口菜單

日期:2007-7-2 22:10:15