permission表
id name method/url
1 查看帖子 get
2 发布帖子 post
3 修改帖子 update
4 删除帖子 delete
用户-权限对应表
id uid perId
1 1 1
2 1 3
采用二进制权限方法时数据表的设计:
user - 用户表
id name per_value
1 AA 6
2 BB 7
3 CC 4
permission表
id name method/url value
1 查看帖子 get 1
2 发布帖子 post 2
3 修改帖子 update 4
4 删除帖子 delete 8
从上面两张表的设计可以看出:采用二进制的方式少了一张中间表!!!它只多了两个字段:一个是权限对应的权限值,一个是用户拥有的权限值总和,所以可以知道——采用二进制的方式可以少一次表查询。
public boolean hasPermission(Permission permission){
int position = permission.getPosition();
long number = permission.getPermissionNum();
return !((permissionSum[position] & number) == 0);
}
}
每个用户的权限值就需要用一个数组来存储,其下标为0的对应着权限位为0的权限值和。这个是不是又转换为数据结构的问题了,所以基础很重要嘛~