数据加载中……
关于web应用程序权限管理的总结(实现)
 

1、基于web信息管理系统的权限设计分析和总结(理论)

2、基于web信息管理系统的权限设计分析和总结(数据结构)

3、基于web信息管理系统的权限设计分析和总结(实现)

首先要说明两点:

1、 本文不是解决一个通用权限管理系统的方案,只是解决特定环境下的权限管理问题。本文给出的实际实现方法是基于sql server数据库的,实现的语言是使用T-Sql语言。当然您可以有更多的实现方式。

2、 附件给出的数据库例子没有经过严格测试,不保证逻辑的正确性,以及性能方面的问题。

 

首先需要一个存储过程来实现计算用户在表单上的权限,这个存储过程接受两个参数,用户ID和表单ID,在这个存储过程里面使用一条sql语句来计算用户在表单上的权限,如下所示:

 

Code

 

在这个存储过程里面,有两个用户函数,分别用于计算字段权限和记录权限。

用于计算字段权限的函数是fun_Purview_GetColumns,这个函数接受三个参数,分别是用户ID、表单ID和字段权限类型,具体如下所示:

 

Code

 

用于计算记录权限的函数是fun_Purview_GetRecordPurview,这个函数接受三个参数,分别是用户ID、表单ID和记录权限类型,具体如下所示:

 

Code

 

使用上面的函数就可以计算用户在表单上的权限了。

 

另外,您也可以对此权限模型进行扩展,比如您可以对角色设置一个角色的权限计算类型属性.

如果此角色是悲观型的,那么此角色和其他角色进行权限计算是,使用最小的权限集合。具体来说对于字段权限,使用与操作,对于字段权限和记录权限,使用交集。如果此角色是乐观型的,那么此角色和其他角色进行权限计算是,使用最大的权限集合。具体来说对于字段权限,使用或操作,对于字段权限和记录权限,使用并集。

 

在具体的项目实践中,为了提高性能,可以设置一些缓存,例如可以把上面的计算结果缓存到一个数据表里面,作为一级数据缓存。在程序中,还可以使用二级缓存在内存中保存用户的权限,当然这样做在提高性能的同时,也增加了程序的复杂度和数据的冗余,需要处理更多的地方。

 

最后,本文提供了一个可以执行的数据库备份,您可以点击此处下载。注意是sql2005的数据备份文件。

========================================================

比sharepoint更强大的表单功能,图形化的流程设计,与asp.net完美结合,支持vs.net编程扩展

========================================================

posted on 2009-06-15 00:05 chegan 阅读(2744) 评论(10) 编辑 收藏

评论

#1楼 2009-06-15 08:28 金色海洋(jyk)      

请问,在调用的时候,传入一个用户,还是多个用户呢?
还有那个表单ID,是一个表单,还是多个表单呢?

返回的结果又是什么样子的呢。

能给个例子就好了。
   回复 引用 查看   

#2楼[楼主2009-06-15 09:10 chegan      

是单个用户的id和单个表单的id,
返回的就是当前用户在这个表单上的各种权限
没有界面的例子,只有执行存储过程察看一下效果
   回复 引用 查看   

#3楼 2009-06-15 09:26 Shannon      

权限可以看看李天平大哥写的LTP.ACCOUNT
   回复 引用 查看   

#4楼 2009-06-15 09:32 金色海洋(jyk)      

@userID nvarchar(100) ,--用户ID

既然是一个,那么为什么要定义这么长呢?即使是GUID,那也只需要 varchar(40),就够了呀。

如果用户ID是int的话,那么还要进行转换。
   回复 引用 查看   

#5楼[楼主2009-06-15 09:41 chegan      

定义长度是为了和数据表里面的用户ID类型和长度一致
   回复 引用 查看   

#6楼 2009-06-22 03:17 钻石蓝球[未注册用户]

楼主还算清楚,权限本来就是排它的,怎么可能通用?
   回复 引用   

#7楼 2009-06-22 12:07 彦斌      

楼主3篇都看完了.准备也跟着实现下.
不知道楼主.是否方便发一些实现页面的截图吗?
kevin.chen@evatic.com
tks
   回复 引用 查看   

#8楼[楼主2009-06-22 13:03 chegan      

--引用--------------------------------------------------
彦斌: 楼主3篇都看完了.准备也跟着实现下.
不知道楼主.是否方便发一些实现页面的截图吗?
kevin.chen@evatic.com
tks
--------------------------------------------------------
没有提供界面的方式阿,只能麻烦您自己使用存储过程来查看结果了。或者您找一个代码生成器来实现以下界面。
   回复 引用 查看   

#9楼 2009-06-22 15:53 彦斌      

谢谢楼主.
问个问题.
那如果要控制某一个员工.只能查看某一部门的信息.要怎么设置?
也有可能他可以查看多个部门.
   回复 引用 查看   

#10楼[楼主] 2009-06-22 16:00 chegan      

这个需要进行设置一些角色,另外还要设计 记录权限,
如果想实现的更复杂一点,你可以扩展一下角色属性,增加文中所提到的乐观、悲观角色。
   回复 引用 查看