在基于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 |