ASP.NET 2.0网站权限设计实现(转载)

来源:互联网 发布:时间序列分析算法 编辑:程序博客网 时间:2024/05/23 11:34
ASP.NET 2.0网站权限设计实现
2008年03月08日 星期六 01:59
做了一些网站,在权限管理方面总是不太顺手,没有形成太好的思路,偶尔看了《电脑编程技巧与维护》2007/2期是的一篇文章《权限管理设计方法》,很受启发,终于将我多年的对权限管理设计的思路给理清了。该文章没有给出完整的代码,对于实现方式个人也存在较多的不同方式,于是决定自己做一套试试,到昨天晚上12点终于基本成型,自我感觉还不错,部分代码还需要进一步完善,但功能已经全部实现。现在对整个设计思路及实施方式做一个总结,供各位讨论,并请提出宝贵意见。
该文章的部分内容如下(我做了部分修改),这也是一个网站或应用系统的权限设计思路:
http://www.comprg.com.cn/detail.asp?hw_id=313 (原文)(网站上原文不全,不过已经足够了)
ASP.NET下基于页面的权限管理设计方法
殷维刚 舒付祥 胡波 李霄
一、引言
ASP.NET为网络系统设计提供的强大的设计功能,其使用简单,易于上手,是开发网络系统不错的选择。在网络系统设计中,用户权限管理是不可缺少的部分,其设计方法对于许多新手来说是一个较为复杂的问题。作者通过开发实践,提供了一种基于角色用户关系的页面权限管理通用方法,这也是实际学习中的一些体会,与大家分享,希望可以起到抛砖引玉的作用。
二、数据库设计
为了实现权限管理的功能,系统开发中借鉴了Windows的用户角色管理方法。在数据库设计中共用了5个表。其中信息表有三个:Users,Role,Module,分别代表用户信息表,用户组(角色)信息表和模块页面信息表。为了表达这三者之间的关系,建立两个关系表:UserRole和RoleModule,分别代表用户与用户组关系、用户组与模块关系。另外我多建了一个部门表Dept用于存放用户部门,这样比较适用于企业内部管理系统。
数据库关系如下图所示:
具体思路是:先建立用户,系统管理员可以对其进行管理,给用户分配不同的用户组(角色),也就是根据需要对其权限进行定制。同一用户可以属于不同的用户组,其使用权限为所赋予用户组的权限的最大限度,用户组为用户权限的集合,不同的用户组(角色)可以访问不同的模块,每个模块又和对应页面(ASP.NET 2.0是和文件夹)联系起来。通过这样的方式,就可以由管理员来任意定制用户的访问权限了。
 
数据库结构建立后,对于单表的操作比较简单,包括用户的insert/delete/update,用户组(角色)的insert/delete/update,模块的insert/delete/update不宜通过程序来实现,因为不同的系统会有不同的模块,这在程序设计时由开发人员来做,不需要再做任何修改。
需要重点实现的是用户与用户组的关系,具体说就是如何将用户加入用户组(角色),用户组(角色)与模块的关系,具体说就是某个用户组具有访问哪此模块的权限,至于模块与页面的对应关系,由开发人员在开发时来做(也只有由他们来做了)。
其中的技术难点有:
1、用户登录后,根据USERID检索该用户的权限,并生成权限树,用TREEVIEW展示出来;思路是,根据USERID检索其所在的用户组,根据用户组所具有的权限,取用户组S的并集。
2、为用户组分配模块的实现方式。由于用户权限树是一个树,因此,在为用户分配权限时,以树+CHECK的模式让管理员选择用户权限是最好的方式。由于VS2005的TREEVIEW的CHECKED无法实现联动(选择根节点时不能自动选择所有子节点,选择子节点时,父节点及根节点也不能自动选择),因此,这部分需要手工编程来做,涉及大量的对树的遍历操作。
3、用户权限树的展示实现。几经比较,我采取的方法是从数据库直接读取并动态生成的方式,其它可以考虑的方式是,先生成XML文件再绑定,不建议使用SITEMAP方式。
先把比较简单的用户管理的代码放在这,后面陆续讨论上面涉及的技术难点。
   
原创粉丝点击