问题引出
一个网站系统针对不同的功能应该对应不同的用户来管理:
- 简单一些的比如系统管理员和普通用户,这种只需要一个字段来标记是否为管理员即可。
- 复杂的应用可能需要在普通用户和管理员之间再细分出多个不同等级的角色。有些应用甚至不能使用分立的角色,赋予用户一系列独立的权限或许更合适。
解决方式
当一个用户拥有多种权限时,用户的权限变更操作就回更加复杂,如果每个权限都单独用字段取标记的话那么权限变更时需要进行多次判断操作,浪费资源和时间,现在一般都是用一个权限的字段来标识权限,每个权限组合对应的值都是唯一的,用常见的博客权限说明如下:
操作 | 权限名 | 权限值 |
---|---|---|
关注用户 | FOLLOW | 1 |
在他人的文章中发表评论 | COMMENT | 2 |
写文章 | WRITE | 4 |
管理他人发表的评论 | MODERATE | 8 |
管理员权限 | ADMIN | 16 |
这样定义权限的好处是每个权限值在二进制中位置都不一样,进行权限判断是秩序进行制定位的判断就可以了,常用位与运算1来判断权限是否存在,
例子:一个用户有关注用户和写文章的权限,那么他的权限permissions值为1+4=5,二进制表示为0101,当判断该用户是否有关注用户权限user_perm时,只需判断permissions & user_perm 是否返回1