为了把做法说清楚我采用了最简单设计来介绍说明问题其他涉及到实际问题我都没有详细介绍说明并且我在通用权限设计(下)文中已经说了这种思路方法必然有其适用范围在这里我不妨把这个适用范围说得清楚点:首先是权值存放功能点权值必须满足2n-1次方也就是说如果我们存放权值类型是类型话那么理论上我们这种做法只能适用32个功能点也就是231次方为最大那个权值如果我们采用big类型来存放那么我们理论上可以做64个功能点也就是263次方为最大那个权值但是如果我们系统所需要功能点远远不止64个那是不是就无法采用这种 2进制按位和、按位或做法了?其实答案是否定我们不妨把功能点分组也就是所谓按模块划分假设有如下情况:
公告模块
增加—— 0001 0001
删除—— 0001 0010
修改—— 0001 0100
查找—— 0001 1000
新闻模块
增加—— 0010 0001
删除—— 0010 0010
修改—— 0010 0100
查找—— 0010 1000
我们假设系统有公告以及新闻两个模块我们用 8位 2进制码前 4位来表示所属模块用后 4位来表示模块下面对应功能点模块和功能点又各自满足2n-1次方规律也就是有公告模块增加操作功能点是 0001 0001 前 4位代表模块区别模块前 4位必须满足2n-1次方不能重复后 4位代表对应模块下面功能点功能点必须满足2n-1次方但是只要求在模块内不重复就行也就是如果有公告增加操作为 0010 0001和新闻模块增加操作 0001 0001比较可以看出前 4位是区别并且满足2n-1次方后 4位却是相同但是 2者总体来看话却是代表区别数分别为17以及33
讲到这里你是否已经明白如何回事了?
如果我们采用这种模块划分做法话我们创建角色以及更改角色时候只需要把功能点权值相加改成功能点权值按位或操作即可即如果角色B具有公告模块增加操作和新闻模块增加操作时候就应该进行 0001 0001 | 0010 0001 = 0011 0001;其他判断和操作均和通用权限设计(下)说样
那么假如我们用64位来存放权值并且前54位我们用来保存模块后10位我们来保存模块对应功能点(实际上大部分模块功能点都只是增删改查4个就够了)也就是说我们实际上可以支持功能点总数就是:54*10=540个般系统应该够用了如果你系统模块较多模块对应功能点又较少我们可以调整模块和功能点所占位数比例以此来适用你系统
最新评论