在基于Web的應用系統中,經常要用到權限的管理和控制,本文主要探討的是基于用戶組的權限管理和控制,并采用XML的文檔來描述它,存儲有關信息。XML的文檔的通用性使得其中的數據信息可以被方便地共享和編輯。由于Web系統常常面向的是多個用戶,每一類用戶又擁有對系統的不同層次的訪問權限。我們把具有相同訪問權限的、邏輯上相一致的用戶集合稱為用戶組。
Web系統平臺的用戶群體可以被劃分為多個具有不同權限的用戶組,用戶的權限可分為:可讀(權限標識:1)、可讀寫(權限標識:2)、管理控制(權限標識:3)。它們代表了用戶在系統中扮演的不同角色以及行為限制。據此,可以將用戶組劃分為三個等級:第一等級,超級用戶組具有完全控制的權限,可以配置管理各個欄目,管理各個用戶和用戶組,配置系統的總體設置等;第二等級,各分欄目或模塊管理員組,這些組的用戶特點是擁有對某一欄目或模塊管理控制的權限;第三等級,普通用戶組,擁有對授權欄目的可讀權限或可讀寫權限。根據不同的用戶組(權限)和不同平臺資源之間的映射關系,可以建立一個基于XML的文檔來描述它。
……
- 5
- 6
……
……
- 5
- 11
- 12
- 13
- 47
……
……
……
- 9
……
……
powercontrol>
在上面的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,查找配置文件,取得對該欄目或模塊的訪問權限與將要進行的操作進行比較,并做出判斷。
由于該方案是基于用戶組,所以可引入新的用戶組來配置的不同的權限組合,也可以對該用戶組內的各個子節點(代表的欄目或模塊)的訪問權限等級進行精確控制。同時根據需要可以擴展訪問權限等級(如將現在定義的三級別權限定義為四級或五級)和增加系統的欄目或模塊。
|
|
文章檢索
編程>熱門文章
|
日期:2007-7-2 22:10:15 |