按位运算实现的权限管理
需求
- 销售系统中需要由销售总监分配权限给销售经理,然后经理再将自己拥有的权限分配到下属人员
实现
- 假设现在有4项权限,分别是add、remove、update、delete,将权限用二进制数字保存起来,修改权限时,只需要修改相应位置的数值即可
销售总监将权限分配给经理
- 比如,销售经理的默认权限是‘0000’,如果需要将add权限分配给经理,只需要将第0位的数字该为1即可
1 | permission_tuple = ('add', 'remove', 'update', 'delete') |
- 这里最好不要使用二进制XOR操作来做权限的翻转,分布式场景下,如果两个操作同时要将权限由0修改为1,那么两次XOR操作的情况下权限修改将会失败
经理将权限分配给下属
与总监分配给经理操作方式相同,但需要首先确认经理本身的权限情况,本身没有的权限不能分配给下属
下属查询自己的权限时,除了要查询自身被分配到的权限外,还需要查询到经理的权限,然后做合并后才是自己实际用于的权限,这样可以防止经理将权限分配下去后,总监又将这项权限从经理手中收回造成的错误
1 | permission = 15 # '1111' |