我用二进制优化了公司的RBAC模型

概述

二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。 这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。 数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。

二进制和八进制、十进制、十六进制都是一样的,逢几进一。

位运算

1、与运算(and&)

# 两个都为1  结果为1
>>> 0b10 & 0b11
2

2、或运算(or |)

# 有一个结果为1  结果为1
>>> 0b10 | 0b01
3

3、异或运算(^)

# 与运算取反
>>> 0b101 ^ 0b111
2

4、非运算(~)

# 0就是1 1就是0
>>> ~0b101
-6

5、左移(<<)

# 左移几倍就是扩大几倍
>>> bin(0b11 << 1)
'0b110'

6、右移(>>)

# 右移几倍就是扩大几倍
>>> bin(0b11 >> 1)
'0b1'
二进制转十进制

公式:

  • 2的n次方的二进制为:1+n个零
  • 2的n次方减一的二进制为:n个1
32 = 2^5 = 0b100000
31 = 2^5-1 = 0b11111

应用

二进制的应用非常广泛.判断一个数的奇偶性,权限设计等等都可以用到。

判断奇偶数

def num_type(num):
    if num & 1 == 0:
        return "偶数"
    else:
        return "奇数"

RBAC

RBAC是基于角色的权限管理,给角色赋予权限,给用户赋予角色,方便管理。

所以在RBAC的设计上,我们有一个功能表。

用户表角色表用户-角色表功能节点表
usernamepasswordnameauthuser_idrole_ididauth
用户1pwd1财务11111
用户2pwd2销售1112210
用户3pwd3推广110133100
  • 我们用MySQL做RBAC的时候,至少需要五张表,而且耦合度高,使用二进制做权限只需要四张表就可以搞定。
  • 在给功能节点只能具有单个权限,1,2,4,8
  • 一个角色可以拥有几个权限,10,110,111等,哪个位为1就代表第几位有权限。
  • 一个人可以有多个权限,在查看用户具有的节点的时候,我们可以查出来用户的角色对用的权限,再做位或运算即可。
  • 针对角色取消权限,我们只需要做异或运算即可。
    在这里插入图片描述
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楼下安同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值