日期:2014-05-20  浏览次数:20563 次

关于权限设计
各位仁兄,在权限设计方面大哥们一般是采用什么样的方式来做呢。
如一个员工。
他的权限介于董事长与总经理之间,也就是说他的权限可以看到总经理这个位置所能看到的项目,又可以看到董事长这个角色才能看到的中一些项目(但不是全部,只是选择一些)。

像这样,是不是采用一个角色表,一个员工表,在抽作时,把所有的权限都列出来,之后在对相应的员工打上想给予的权限呢。

在此请求大哥们多给指点,提出设计方法。

如果那位大哥有写过关于这方面的权限控制类,如果方便也希望能提拱一下给我参考。我不一定要源码,有相关说明就行,当然有源代码最好。

我的邮箱是:bfqyvek@163.com

十二分希望大哥们多指点小弟。必竞对权限方面我还是半桶水。




------解决方案--------------------
帮你顶 我也遇到这样的问题
------解决方案--------------------
不顶不行!
------解决方案--------------------
我现在正在做一个权限的设计!用的是一棵控件树来设置用户对哪个模块拥有什么样的权限
这样对每个用户权限的设置都不一样!通过一个权限表来记录用户的权限!

------解决方案--------------------
帮顶来了,学习一下
------解决方案--------------------
用户表
权限表
角色表
让部门经理去创建角色,部门经理去给角色分配权限,管理员把用户定位到角色上去
------解决方案--------------------
我是这样做的,用户表、权限表、角色表、用户角色表、角色权限表
------解决方案--------------------
每个用户定义相同。
定义用户组,用户可以在一个或多个用户组内,也可以不在任何一个组内。
定义权限。如:查看,添加,修改,删除等。
定义用户或用户组在每个项目上的权限。

如:
用户A,用户B,用户C,用户D,用户E,用户F
用户B和用户C属于经理组,用户D和用户E属于员工组,用户F即属于员工组又属于经理组。

项目1的权限:
用户A有所有权限,经理组有查看、添加、修改的权限,员工组有查看权限。用户F因同属两个组,就高不就低,即拥有经理组的权限。

如再复杂些,可以象Windows一样,给每个权限加上允许和拒绝,拒绝高于允许。也说是说,如果某一项目的权限是经理组允许而员工组拒绝,则用户F的权限就是拒绝。

程序在检查权限时的流程是:当某用户访问某项目时,比如是查看操作,先检查该用户是否有查看权限,有三种情况:
1.允许。这时再遍历其所在的用户组,如果有拒绝存在,则该用户的最终权限是拒绝。
2.拒绝。这时不用再查其它的权限了,直接就是拒绝。
3.未设置。也就是即不允许也不拒绝。这时再遍历其所在的用户组,如遇到允许权限时记录,如遍历结束后未遇到拒绝权限,则该用户最终权限为允许,如遇到拒绝权限,则终止遍历,最终权限为拒绝。如遍历过程中都是未设置,则表示没有为该用户定义任何的权限,那么该用户的最终权限也应是拒绝。

这样的好处是可以组合出各种的权限。
------解决方案--------------------
我都求过,但是没有结果
------解决方案--------------------
模范windows就可以了。
------解决方案--------------------
常规做法吧:

用户表
------------------------------
用户ID 用户角色 说明
------------------------------
1 1 张董
2 2 王总
3 3 赵秘
...

角色表
------------------------------
角色ID 角色名
------------------------------
1 董事长
2 总经理
3 董事长小秘
...

系统功能表
------------------------------
功能ID 功能说明
------------------------------
1 董事长的功能
2 总经理的功能
...

允可表
------------------------------
ID 角色ID 拥有功能ID
------------------------------
1 1 1
2 2 2
3 3 1
4 3 2
...


最后代码里根据允可表中记录来决定用户拥有的功能,可以看出,角色3拥有了1和2的功能。
------解决方案--------------------
很好,学习!
------解决方案--------------------
呵呵,先弄清楚ntfs权限的设计了,这是最原子的么
完全控制 写 读 浏览 修改==
xp分为三类用户组么 administrator | power user | guest
还有一种是system权限组(最高级所有都是完全控制),隐藏boss只能在安全模式下见的到

把每种权限分成 5种么 “读、写、浏览、修改、完全控制”用一个字节的binary保存
就像是00011110 这样的一个权限,1表示有0表示无。
用户组的权限和 制定用户的权限 或操作 a|b 譬如guest用户权限00010100,被添加到了Administrator组(黑客经常这么做)00011111。那么最终guest用户权限为00011111即为完全控制了。

我只是提供一种思路,希望对你有所帮助了,至于数据库的设计么,尽量少的冗余即可了

------解决方案--------------------