一条acl授权记录中主要记录了以下信息:
角色
资源
授权
授权作为一个int, 每一位是一个操作的权限.
假设从右向左, 分别代表CRUD
那么, 我们CRUD的代码就应该是0123(也就是移位时要移的位数), 因为我们要进行移位进行认证。
先看授权与取消授权的代码:
首先, 一个int temp = 1的临时变量, aclState为原始授权状态
tmp的二进制表示是: 00000000 00000000 00000000 00000001
U对应的代码是U, 对应的是2.
将tmp左移2位, temp = tmp < < 2; temp变成:00000000 00000000 00000000 00000100
假设原始授权是aclState=00000000 00000000 00000000 00001010
当变量yes=true时,为授权,将temp与aclState求|运算,因为temp现在只有他要授权的位为1,求或运算后,
aclState=00000000 00000000 00000000 00001110,这样就授权成功
当变量yes=false时,为取消授权,先将temp取反,即为11111111 11111111 11111111 11111011,
现在只有要取消权限的位为0,其余全为1,然后与aclState求&运算,则除了要取消权限的位变0,其余的都不变,
即aclState=00000000 00000000 00000000 00001010
再来看认证:
认证更简单,直接将temp变量与aclState求&,temp为1的位为要验证的权限,其余全为0,如果aclState的这一位为1,则结果不为零,即有该权限;若aclState这一位为0,即没权限,则结果为0,没有该操作权限