专注于中国的商业智能

通用用户权限系统设计

做了n多的MIS系统,很久以前就有这种想法,想把MIS系统中的用户权限

管理和审批流管理独立出来,做成单独的组件,但是因为各种各样的原

因,都没有去做,也许是太懒了。今天终于痛下决心,一定要把这两个

东西给做成组件,说干就干。因为代码还没有写完,今天暂时就把数据

库设计发上来,等代码搞好了,并且把代码搞的好看点后,我以后可能

会把这个权限管理组件和审批流管理组件开源。

今天暂时就看权限管理系统的数据库表设计吧。

子系统表,因为我这里设计的为了能够集成公司内部以后所有的系统的,所以建了子系统这张表,如果单个项目,这张表可以去掉。

模块表,系统中的各个模块。

模块功能表,模块中的各个功能(可以有两种功能,一种是页面的进入权限,一种是页面上的按钮事件)

用户表

角色表

用户分组表

用户部门表

用户权限表(也可以直接对用户赋予权限)

角色权限表(对角色赋予权限)

用户和分组关系表(一个用户可以属于多个分组)

用户和角色关系表(一个用户可以拥有多个角色)

用户分组和角色关系表(一个分组可以拥有若干角色)

posted on 2008-04-26 15:07 李梦蛟 阅读(4736) 评论(43)  编辑 收藏 所属分类: 系统分析设计

Feedback

#1楼  2008-04-26 15:39 NetThis [未注册用户]

期待!!   回复  引用    

#2楼  2008-04-26 15:42 金色海洋(jyk)      

这么简单呀,我是说没有写什么说明。

基本了解你的思路,因为我们的思路差不多。   回复  引用  查看    

#3楼  2008-04-26 15:51 NetThis [未注册用户]

解决同样的问题,需要同样的方法。英雄所见略同。   回复  引用    

#4楼  2008-04-26 15:55 花非花      

稍显复杂,还做不到通用吧。   回复  引用  查看    

#5楼  2008-04-26 16:00 金色海洋(jyk)      

通用是可以的了,只是感觉无限级分类的地方好像字段不是太够。

表之间的区分不是太明显。

提问:一个人是否可以在多个部门?   回复  引用  查看    

#6楼 [楼主] 2008-04-26 16:01 李梦蛟      

@金色海洋(jyk)
一个人不能在多个部门的   回复  引用  查看    

#7楼  2008-04-26 16:06 小朱      

可以做成通用的。   回复  引用  查看    

#8楼  2008-04-26 16:18 金色海洋(jyk)      

那要是一个员工在两个或多个部门的时候怎么办呀?
比如某部门经理兼任另一个部门的经理,或者。。。

怎么办呢?   回复  引用  查看    

#9楼 [楼主] 2008-04-26 16:22 李梦蛟      

@金色海洋(jyk)
那就要把用户表里面的depid字段去掉,然后另外建一张用户和部门关系表   回复  引用  查看    

#10楼  2008-04-26 16:28 花非花      

没有权限控制的内容,我觉得应该把访问的页面也归为一种权限。权限和用户组关联,用户和用户组关联,而且可配置,能够很好的解决用户、用户组、权限得关系。把子系统,部门的概念去掉,不是每个软件都有这些概念的,使用用户组的概念。光看用户的定义就会发现,几乎用到任何一个不同的项目,它都会被修改,怎么通用呢?   回复  引用  查看    

#11楼  2008-04-26 16:35 Yannic Yang      

权限的数据最好不要存在数据库里
否则每次权限判断(非常平凡)都需要读取数据库 会很耗的。。。
当然可以用缓存,不过那样设计起来不会简单

最好还是用xml之类的,静态加载在内存里,这样效率会很
因为权限数据本身数据量不会太大

当然还得根据实际情况设计   回复  引用  查看    

#12楼  2008-04-26 16:37 簡簡單單..      

设计不好   回复  引用  查看    

#13楼  2008-04-26 16:44 布尔      

为什么不用membership呢,反正怎么做也不能应付所有的需求   回复  引用  查看    

#14楼  2008-04-26 16:59 右手交易      

加油,我比较想看看你关于检测用户是否具备某权限,然后控制页面元素的代码,怎么做到通用.   回复  引用  查看    

#15楼  2008-04-26 17:03 ^盛天^ [未注册用户]

权限控制应该是分为三个控制层次:验证,授权,资源控制。
验证就是检查来访问者是否是本系统内合法的用户
授权是检查用户是否有权限进行某一项功能操作
资源控制则是控制着谁能访问什么资源

另外权限控制系统是建立在用户组织结构系统的基础上,应独立设计。

个人意见,有说错的地方欢迎拍砖!   回复  引用    

#16楼  2008-04-26 17:36 ZZZZZZZ [未注册用户]

权限如何和程序的功能结合是关键的   回复  引用    

#17楼  2008-04-26 17:54 狼Robot      

期待代码.楼主加油.   回复  引用  查看    

#18楼  2008-04-26 18:38 bamboo_ding [未注册用户]

和我们公司的流程类似,之前也想过,也是因为懒没有做...o(∩_∩)o...哈哈   回复  引用    

#19楼  2008-04-26 20:01 re: 通用用户权限系统设计 [未注册用户]

我觉得表结构不如贴一个对象模型图更加容易理解。   回复  引用    

#20楼  2008-04-26 20:10 费哥      

建议你看看胡长城的关于组织关系模型的一些文章.已经很明了了   回复  引用  查看    

#21楼  2008-04-26 20:27 皇帝的新装      

概念视图都没有,先出现数据结构,遑论什么通用设计哦   回复  引用  查看    

#22楼  2008-04-26 20:31 金色海洋(jyk)      

怎么这么乱哦。

先出现数据结构怎么就不能通用了呢?

我都用了好几个项目了,当然和lz的有点不太一样。   回复  引用  查看    

#23楼  2008-04-26 20:58 森要 [未注册用户]

大家可以参考一下李天平老师的代码生成器用的示例程序,里面的权限控制部份相当实用   回复  引用    

#24楼  2008-04-26 21:16 碧落      

似乎只有功能权限这部分的控制,没有数据权限的控制啊,比如某个部门的数据是否能被哪些人/部门浏览或修改。   回复  引用  查看    

#25楼  2008-04-26 21:54 将飞      

系统中又是角色又是用户组.
1,能跟我解释一下这两个有什么不同吗,好像有些重复了吧?
2,对数据的访问内容的权限怎么做,例如A能看见奔驰车数据,B能看见宝马车数据?   回复  引用  查看    

#26楼  2008-04-26 22:21 喝小酒泡尼姑 [未注册用户]

有没有直接表下载:)   回复  引用    

#27楼  2008-04-27 09:40 木野狐(Neil Chen)      

用户的手机,地址等信息不应该存在这里,这和权限没关系。   回复  引用  查看    

#28楼  2008-04-27 13:09 Longsea [未注册用户]

希望能有实例,谢谢!   回复  引用    

#29楼  2008-04-27 14:20 Peter_pan      

期待中。。。   回复  引用  查看    

#30楼  2008-04-27 14:44 showfan      

--引用--------------------------------------------------
将飞: 系统中又是角色又是用户组.
1,能跟我解释一下这两个有什么不同吗,好像有些重复了吧?
2,对数据的访问内容的权限怎么做,例如A能看见奔驰车数据,B能看见宝马车数据?
--------------------------------------------------------
我的做法:
1、角色应该是系统内置的,用户组应该是用户可管理的,如“党员”、“女职工”、“姓邓的”等
2、通用的用户权限系统只做跟用户有关的资源权限控制,业务级的(你所说的)由具体的应用程序处理   回复  引用  查看    

#31楼  2008-04-27 15:18 侯垒      

期待中.   回复  引用  查看    

#32楼  2008-04-27 16:25 在线代理 [未注册用户]

有uml才行啊。   回复  引用    

#33楼  2008-04-27 17:27 将飞      

--引用--------------------------------------------------
showfan: --引用--------------------------------------------------
将飞: 系统中又是角色又是用户组.
1,能跟我解释一下这两个有什么不同吗,好像有些重复了吧?
2,对数据的访问内容的权限怎么做,例如A能看见奔驰车数据,B能看见宝马车数据?
--------------------------------------------------------
我的做法:
1、角色应该是系统内置的,用户组应该是用户可管理的,如“党员”、“女职工”、“姓邓的”等
2、通用的用户权限系统只做跟用户有关的资源权限控制,业务级的(你所说的)由具体的应用程序处理
--------------------------------------------------------
1,我明白你的意思了,但博主的设计中有以下3个.用户直接跟角色联系了,还要分组做什么?
用户和分组关系表(一个用户可以属于多个分组)

用户和角色关系表(一个用户可以拥有多个角色)

用户分组和角色关系表(一个分组可以拥有若干角色)

2,能跟我分享一下你的思路吗?是不是查询时把条件写到Where中?   回复  引用  查看    

#34楼  2008-04-27 19:52 镜涛      

在家就想看,可是手机总是打不开图片。哎,没电脑就是不行啊~   回复  引用  查看    

#35楼  2008-04-28 09:48 今天生日 [未注册用户]

通用走不通,鉴定完毕!   回复  引用    

#36楼  2008-04-28 09:59 future001 [未注册用户]

@花非花
严重同意!部门是现实中的人物用例角色,而角色角色分组是系统中的内容!而我们不能因为因为某个人的现实中是总载就要给他最大的权限,这样,部门与角色的交叉会增加复杂度!   回复  引用    

#37楼  2008-04-28 10:23 ddr888      

好像已经 有类似的开源项目了
http://framework.supesoft.com/   回复  引用  查看    

#38楼  2008-04-28 11:24 狼Robot      

楼上的不是AD吧,开源的都是07年初的东西了,新的都是商业版了.   回复  引用  查看    

#39楼  2008-04-28 11:32 fay [未注册用户]

希望早日完成你的通用用户管理系统   回复  引用    

#40楼  2008-04-28 13:07 Kevin Zeng      

@花非花
--引用--------------------------------------------------
花非花: 没有权限控制的内容,我觉得应该把访问的页面也归为一种权限。权限和用户组关联,用户和用户组关联,而且可配置,能够很好的解决用户、用户组、权限得关系。把子系统,部门的概念去掉,不是每个软件都有这些概念的,使用用户组的概念。光看用户的定义就会发现,几乎用到任何一个不同的项目,它都会被修改,怎么通用呢?
--------------------------------------------------------
顶这个
这样比较自由
通过使用者的配置能够适应系统对权限的详细要求   回复  引用  查看    

#41楼  2008-04-28 17:35 virus      

不错,可以让个人属于角色或者组,又考虑到了特权的情况,期待开源   回复  引用  查看    

#42楼  2008-05-26 22:53 ys_honghu@hotmail.com [未注册用户]

权限控制要分好几种啊,比如说菜单权限,一个用户进去后能看见哪些菜单,功能权限、数据权限(用户对哪些表的哪些字段有什么操作权限),菜单权限要单独设计表,功能权限和数据权限也要单独设计表。
还有,其实角色和用户组本质上都是对用户分组,可以用一个表实现。
以上是个人意见。   回复  引用    



标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-26 15:09 编辑过


相关链接: