ACL系统授权与认证

一条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,没有该操作权限

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值