除了通过引入权限空间的概念突破二进制运算的位数限制,还可以使用 math.js 的 bignumber,直接运算超过 32 位的二进制数,具体可以看它的文档,这里就不细说了 。
5. 适用场景和问题如果按照当前使用最广泛的 RBAC 模型设计权限系统,那么一般会有这么几个实体:应用,权限,角色,用户 。用户权限可以直接来自权限,也可以来自角色:
- 一个应用下有多个权限
- 权限和角色是多对多的关系
- 用户和角色是多对多的关系
- 用户和权限是多对多的关系
而进制转换的方法则可以省略对应关系表,减少查询,节省空间 。当然,省略掉对应关系不是没有坏处的,例如下面几个问题:
- 如何高效的查找我的权限?
- 如何高效的查找拥有某权限的所有用户?
- 如何控制权限的有效期?
6. 其他方案除了二进制方案,当然还有其他方案可以达到类似的效果,例如直接使用一个1和0组成的字符串,权限点对应index,1表示拥有权限,0表示没有权限 。举个例子:添加 0、删除 1、编辑 2,用户A拥有添加和编辑的权限,则 userCode 为 101;用户B拥有全部权限,userCode 为 111 。这种方案比二进制转换简单,但是浪费空间 。
还有利用质数的方案,权限点全部为质数,用户权限为他所拥有的全部权限点的乘积 。如:权限点是 2、3、5、7、11,用户权限是 5 * 7 * 11 = 385 。这种方案麻烦的地方在于获取质数(新增权限点)和质因数分解(判断权限),权限点特别多的时候就快成 RSA 了,如果只有增删改查个别几个权限,倒是可以考虑 。
来源:掘金 链接:https://juejin.im/post/5dc36f39e51d4529ed292910
【JavaScript 中的位运算和权限设计】
推荐阅读
- 国都证券|面试中的奇葩事
- 2022第三代社保卡有几个密码,第三代社保卡密码是几位数
- 茶水在食疗养生中的妙用
- 三星堆遗址以高度发达的青铜文明著名于世 我国西南地区的青铜时代遗址三星堆位于哪个省
- 淘宝店铺定位的要素 淘宝店铺的市场定位
- 单位体检一半人都有肺结节吗,单位体检过程中发现肺部结节会现场告诉吗
- 水浒传中的王婆茶坊
- 什么星座中的七颗亮星组成一个勺子的形状 北斗七星是勺子形状的吗
- 如何挑选优质益母草茶
- 雪天开车手动挡下坡用几档 下雪天开车用什么档位