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