权限设计-位与运算

问题引出

一个网站系统针对不同的功能应该对应不同的用户来管理:

  • 简单一些的比如系统管理员和普通用户,这种只需要一个字段来标记是否为管理员即可。
  • 复杂的应用可能需要在普通用户和管理员之间再细分出多个不同等级的角色。有些应用甚至不能使用分立的角色,赋予用户一系列独立的权限或许更合适。

解决方式

当一个用户拥有多种权限时,用户的权限变更操作就回更加复杂,如果每个权限都单独用字段取标记的话那么权限变更时需要进行多次判断操作,浪费资源和时间,现在一般都是用一个权限的字段来标识权限,每个权限组合对应的值都是唯一的,用常见的博客权限说明如下:

操作权限名权限值
关注用户FOLLOW1
在他人的文章中发表评论COMMENT2
写文章WRITE4
管理他人发表的评论MODERATE8
管理员权限ADMIN16

这样定义权限的好处是每个权限值在二进制中位置都不一样,进行权限判断是秩序进行制定位的判断就可以了,常用位与运算1来判断权限是否存在,
例子:一个用户有关注用户和写文章的权限,那么他的权限permissions值为1+4=5,二进制表示为0101,当判断该用户是否有关注用户权限user_perm时,只需判断permissions & user_perm 是否返回1


  1. 两个值进行位与运算是只有当对应两个二进位都为1时结果为1,其他为0,位与运算 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值