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

关于权限系统的设计
想设计个权限系统,查了一些相关的资料
java的JAAS没看懂,也懒得看,没找到net相关的
rbac的原理也大概看了下,说的够啰嗦的。。。
感觉上rbac和我的思路差不太多,不过也有可能是我没看懂

先说一下我自己的思路,和原则
1、如果可能的话要支持多系统,意思是多个系统共用一个权限管理系统,之所以考虑有这个功能,是因为要做多个系统,不想每个系统都写一个权限管理,不过这个是可选的。
2、对于一个系统来说,要做到每个按钮、每个列表都要有权限的概念

基于以上两点,我大概想的是这样
组件表(也可以称为资源表),就是所谓的某个按钮、某个页面、某个列表等
功能表:比如按钮的点击操作、页面的浏览操作、增、删、改、查等等
权限表:就是组件表和功能表的关系表,比如某个按钮的点击操作
角色表:权限的集合
用户表:用户不能直接和权限相关,只能与角色相关

如果是多系统的话 可能在设计的时候还要在表结构上加上一个系统的字段加以控制


问题来了
1、原计划是想设计一个支持多系统的权限管理系统,这样就避免了每个新系统都需要写自己的权限模块,不知道这个思路是否可行,我上面写的这个思路,可以实现多系统共用一个权限系统,只是不知道“多系统共用一个权限系统”这个想法是否正确
2、因为权限细化到了每个组件的具体操作(比如按钮的点击),这样就要求每个组件的地方都会有权限的验证,就会导致每个地方都会写一段验证的代码,感觉这样会很麻烦,有没有其他的思路或者更好的办法?
3、在系统启动之后,我会把上面相关表数据都序列化到本地并缓存到内存里,这样不会导致大量读库操作,每次更新权限也会同事更新本地的序列化文件和内存,所以实时性不用考虑,还想到些一个PageBase类,集成Page类,在用户登录的时候,先把用户的权限相关信息存到这里面,这样就不用每次验证的时候都去读内存,但是这些都解决不了2里面提到的每个组件都验证的问题,求思路?

多谢各位,语文不好,有的地方可能没说明白,见谅。。。

------解决方案--------------------
1、加入你用的是一个数据库的权限的那几个表,当然就可以,不过不建议这样。建议弄几个数据库,然后一个更新后数据库的表复制。当然你结构都一样。
2、数据库设计可以解决这个问题,比如只有浏览权限的 ,对应的数据库按钮只有查看按钮,当然两个建立关联表。
------解决方案--------------------
1.可以。asp.net就有个微软的权限系统membership,他就是多系统了,只是多个application表就解决了。
2.怎么会每个地方都要写相同的代码呢?只要写个能解析权限表达式的类不就行了,最终返回个true或false。