日期:2014-05-17  浏览次数:21138 次

最近在设计一个B2B权限系统,关于角色授权、用户授权的时候写不下去了
最近在设计一个B2B权限系统,大体需求:不同用户进入系统后根据权限看到不同的菜单;超级管理员可以针对角色授权,也可以单独针对用户授权

相关数据库表设计如下:
用户表
角色表
权限表
用户角色表
角色权限表
用户权限表
菜单模块表
角色模块表

关于角色授权、用户授权的时候写不下去了,因为用户的权限直接关系到他登录后所能看到的菜单
请问:权限表和菜单表有什么联系?


------解决方案--------------------
个人意见:

菜单表应该有一个权限表的值,用来表明这个菜单的访问权,那个表和权限表应该是foreign key的多对一关系。

例如:
管理菜单 --->对应的是 (一般管理员)权限。

我不清楚你的权即是如何设计的,是否有级别划分,如:用户 < 版主 < 总版主 < 一般管理员 < 系统管理员。 
如果有级别划分,上面的例子中,管理菜单只能由大于或等一般管理员权限的人访问,即一般管理员和系统管理员。
如果没有级别划分(类似角色),菜单表里的访问权栏,应该是一对多的关系。


------解决方案--------------------
探讨
不过还是有点模糊:既然没有访问权限了,为何还要来个菜单表?提取菜单的时候直接从权限表里提取不就得了,感觉有点画蛇添足

------解决方案--------------------
这一段时间也正在做这么一个权限系统。

具体来说,系统中的权限系统分为功能级别的(操作按钮、菜单)、数据级别的(包括显示哪些数据,不显示那些数据)。

因为一个系统中的,有关数据级别的权限个人认为都是在编写程序的过程中,不管是通过业务逻辑还是其他方式,即,都是固化的,不需要有相应的改动,这种数据级别的权限是在系统构建过程中,能穷举,可以赋予相应的角色。

至于功能级别的,因为系统在发展过程中,会今天增加一个菜单、明天增加一个按钮,所以没有固化,需要能动态的实现配置,这就需要把“角色--功能点”能进行动态的配置,否则,光罗列系统中已有的或将有的功能权限,就会把人折腾死。

至于怎么样让程序能自动知道系统中有多少功能点呢?
1、java上,通过系统自动分析自己的类、包,可以得到操作的函数,譬如,ssh模式中的ActionForward,那么,就会得到系统中的所有功能权限的进入点,这时候,就可以把角色和这些功能点之间进行配对,接下来就可以吧用户和角色之间进行匹配;

2、.net也和java差不多,可以通过程序自己分析自己的cs文件,得到相应的功能点对照的操作函数。