最新评论
Abbott zhao 2009-01-12 13:19
你的权限设计是基于数据结构的,没有体现权限的基本模型(RBAC)--授权,验证,权限的二元操作等等。而且你的权限系统做为通用权限模型,必须可扩展,而且不能把二元操作的对象仅体现在模块列表中,而应该是通用的资源概念。
吴潮槟 2009-01-10 21:20
用int不如用字符串,楼主的设计方案跟我现在用的差不多,不过没有我的强大。
Permission其实可以用一个字符串key来表示,
如:Add,View,Edit,Delete,Setup,Info等等
而角色的权限值可以通过一个string来
如:(View,Add,Edit)
而在业务逻辑上可以将Permission定义为一个枚举,在处理角色的权限值时直接转换成枚举类型就行了。但这种方案有一个缺点就是如果用ulong类型,也只能支持到64种Permission
另外楼主的这种方案中对粗粒度控制效果不错,但对细粒度控制无能为力。
希望能跟楼主多多讨论权限控制中的细粒度
Permission其实可以用一个字符串key来表示,
如:Add,View,Edit,Delete,Setup,Info等等
而角色的权限值可以通过一个string来
如:(View,Add,Edit)
而在业务逻辑上可以将Permission定义为一个枚举,在处理角色的权限值时直接转换成枚举类型就行了。但这种方案有一个缺点就是如果用ulong类型,也只能支持到64种Permission
另外楼主的这种方案中对粗粒度控制效果不错,但对细粒度控制无能为力。
希望能跟楼主多多讨论权限控制中的细粒度
b4n73 2009-01-09 23:35
@沈跃
我前面已经讲了如何给角色赋值,那么假如赋了两个角色B,C,他们的权值是1跟15,那么用户此时所具有的权值就是 1 | 15 = 15了
判断用户是否具备某功能点的权限只需要把功能点的权值与用户的权值进行按位与操作即可~
我前面已经讲了如何给角色赋值,那么假如赋了两个角色B,C,他们的权值是1跟15,那么用户此时所具有的权值就是 1 | 15 = 15了
判断用户是否具备某功能点的权限只需要把功能点的权值与用户的权值进行按位与操作即可~
yangjun 2009-01-09 23:32
楼主能不能放个demo出来,让我等好好揣摩一下,因为以前没有做过权限方面的设计,不知道具休怎么进行与或操作。希望能有个代码,参考。谢谢
杨义金 2009-01-09 23:00
沈跃 2009-01-09 22:00
假如又有角色C的权值为1,而用户A同时具备角色B以及角色C,那么当用户登陆的时候只要根据关联表找到他对应的两个角色,再把角色B以及角色C的权值进行按位或操作,即:1 | 15 = 15,15这个值就是用户A所具有的权值了,我们把这个权值保存起来,放入Session或者Cookies当中,显然15这个权值与1,2,4,8做按位与操作的时候皆可得到1,2,4,8,于是用户A就得到了角色B以及角色C的权限,并且角色B跟角色C的权限已经进行了合并。
这个是什么意思?
这个是什么意思?
kkeen 2009-01-09 18:21
我想问一下,如果有100个模块(甚至更多),也就是说权值是2的100-1次方,但这个值用什么类型来保存呢?又怎么进行与运算呢?
徐少侠 2009-01-09 17:59
我觉得所谓通用还是有机会的
每个可执行的功能都是一个功能点
所有功能点要被记录在数据库中
博主所谓的功能点和我的说法不是一样的。
因为你说的仅仅是增删改查,其实还是基于数据的操作
虽然能覆盖99%的需要,但是不能保证通用
而我说的功能点,就是一个具体的操作,简单说就是用户嘴里的“能干什么”
然后,我们还需要一个“谁谁”的记录
那么关联起来就是谁谁能干什么
然后,为了简化配置,我们就需要一个“角色”
但是,能干什么这个功能点记要和谁谁关联,又要和角色关联
还有,除了能定义能干什么的关联,还要定义禁止干什么的关联
这样就能在角色组合后对特定的人或角色禁止
其实,通用权限管理是整合了用户管理、角色管理、权限管理、功能点管理4个模块的解决方案
缺少任何一个,就不能成为通用方案
微软的成员管理提供了用户管理的通用方案
角色管理也有了一个基础的模块,不过欠缺角色嵌套的功能
所谓通用权限管理,最终应该是一套数据库表以及服务类库
界面呈现是不需要考虑的。
然后就在大家的项目中各自调用就可以了
每个可执行的功能都是一个功能点
所有功能点要被记录在数据库中
博主所谓的功能点和我的说法不是一样的。
因为你说的仅仅是增删改查,其实还是基于数据的操作
虽然能覆盖99%的需要,但是不能保证通用
而我说的功能点,就是一个具体的操作,简单说就是用户嘴里的“能干什么”
然后,我们还需要一个“谁谁”的记录
那么关联起来就是谁谁能干什么
然后,为了简化配置,我们就需要一个“角色”
但是,能干什么这个功能点记要和谁谁关联,又要和角色关联
还有,除了能定义能干什么的关联,还要定义禁止干什么的关联
这样就能在角色组合后对特定的人或角色禁止
其实,通用权限管理是整合了用户管理、角色管理、权限管理、功能点管理4个模块的解决方案
缺少任何一个,就不能成为通用方案
微软的成员管理提供了用户管理的通用方案
角色管理也有了一个基础的模块,不过欠缺角色嵌套的功能
所谓通用权限管理,最终应该是一套数据库表以及服务类库
界面呈现是不需要考虑的。
然后就在大家的项目中各自调用就可以了

