权限设计:再说权限设计

  我在通用权限设计(上)以及通用权限设计(下)两文中简单介绍了种权限设计思路

  为了把做法说清楚我采用了最简单设计来介绍说明问题其他涉及到实际问题我都没有详细介绍说明并且我在通用权限设计(下)文中已经说了这种思路方法必然有其适用范围在这里我不妨把这个适用范围说得清楚点:首先是权值存放功能点权值必须满足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个般系统应该够用了如果你系统模块较多模块对应功能点又较少我们可以调整模块和功能点所占位数比例以此来适用你系统

Tags:  qq空间访问权限 权限设计

延伸阅读

最新评论

发表评论