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

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







      ……

           5

           6

……





……

           5

           11

12

13

47

……



……



        ……

9

……



……



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

在權(quán)限認(rèn)證模塊中,通過讀取XML配置文件和數(shù)據(jù)庫中的數(shù)據(jù),可以判斷對指定欄目的訪問權(quán)限。

權(quán)限認(rèn)證函數(shù)為:

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

userGroupID:當(dāng)前用戶用戶組的id;

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

OperareID:當(dāng)前用戶要進(jìn)行的操作:1:代表讀;2:代表寫;3:代表管理控制

返回值為true表示通過驗(yàn)證;返回值為false表示通過未驗(yàn)證。

具體代碼如下:

//引入命名空間,使程序可以訪問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;

//遍歷各個(gè)節(jié)點(diǎn)

while (node!=null)

{

//查找當(dāng)前用戶所屬用戶組的節(jié)點(diǎn), userGroupID為當(dāng)前用戶用戶組的id

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

{

     subnode=node.FirstChild;

//遍歷各個(gè)子節(jié)點(diǎn)

while (subnode!=null)

{

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

if(subnode.InnerText==ClassID)

{

      flag=true;

      break;

     }

        subnode=subnode.NextSibling;

}

}

if(flag) break;

node=node.NextSibling;

}

if(!flag)

{

//沒有訪問的權(quán)限,拒絕訪問

return false;

……

}

else

{

//有訪問的權(quán)限

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

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

……

int PID=(int) PowerID;

//判斷當(dāng)前要進(jìn)行的操作是否符合對應(yīng)的權(quán)限要求

if(OperareID<= PID)

{

//符合權(quán)限要求,允許訪問

return true;

}

else

{

 //不符合權(quán)限要求,拒絕訪問

return false;

}

}

 

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

由于該方案是基于用戶組,所以可引入新的用戶組來配置的不同的權(quán)限組合,也可以對該用戶組內(nèi)的各個(gè)子節(jié)點(diǎn)(代表的欄目或模塊)的訪問權(quán)限等級進(jìn)行精確控制。同時(shí)根據(jù)需要可以擴(kuò)展訪問權(quán)限等級(如將現(xiàn)在定義的三級別權(quán)限定義為四級或五級)和增加系統(tǒng)的欄目或模塊。

文章檢索    


編程>熱門文章

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

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