Php 不一致位权限计算器
我试图让我的工具/脚本确定登录用户是否具有使用该工具的正确权限。但是,Discord使用权限int进行响应 似乎我必须使用位运算符检查权限,但从我在谷歌上搜索过的所有内容来看,我发现的几乎所有内容似乎都完全无关 权限示例:Php 不一致位权限计算器,php,api,bitwise-operators,discord,Php,Api,Bitwise Operators,Discord,我试图让我的工具/脚本确定登录用户是否具有使用该工具的正确权限。但是,Discord使用权限int进行响应 似乎我必须使用位运算符检查权限,但从我在谷歌上搜索过的所有内容来看,我发现的几乎所有内容似乎都完全无关 权限示例:2146958591 权限引用 //概述 generalCreateInstantInvite:0x1, GeneralClickMembers:0x2, 一般成员:0x4, 总管理员:0x8, GeneralManager通道:0x10, GeneralManager服务器:
2146958591
权限引用强>
//概述
generalCreateInstantInvite:0x1,
GeneralClickMembers:0x2,
一般成员:0x4,
总管理员:0x8,
GeneralManager通道:0x10,
GeneralManager服务器:0x20,
一般更改昵称:0x4000000,
GeneralManager昵称:0x8000000,
GeneralManager角色:0x10000000,
generalManageWebhooks:0x20000000,
GeneralManageMojis:0x40000000,
generalViewAuditLog:0x80,
//正文
textAddResponses:0x40,
textReadMessages:0x400,
textSendMessages:0x800,
textSendTTS消息:0x1000,
textManageMessages:0x2000,
文本链接:0x4000,
文本附件文件:0x8000,
textReadMessageHistory:0x10000,
text每个人:0x20000,
textUseExternalEmojis:0x40000,
//声音
voiceViewChannel:0x400,
语音连接:0x100000,
voiceSpeak:0x200000,
VoiceMute成员:0x400000,
voiceDeafenMembers:0x800000,
voiceMoveMembers:0x1000000,
voiceUseVAD:0x2000000
是否有我可以研究的工具或示例脚本,以确定如何进行此计算
提前谢谢你 要检查给定的权限值是否具有选定的权限,请使用位AND运算符 例如:
$canKickMembers = ($permissionCode & 0x2) != 0;
假设您有
4个
不同的操作要允许或禁止每个用户:
- 创建帖子
- 更新帖子
- 阅读文章
- 删除帖子
1
和0
。字符串中的第一个字符表示用户可以创建post
操作。第二个字符–更新帖子
,第三个字符–阅读帖子
,第四个字符–删除帖子
。例如,如果用户拥有权限1001
,则他可以创建帖子和删除帖子,但不能更新和阅读
存储这些权限最有效的方法是什么?我们在字符串的每个位置都只有0
和1
,因此我们可以将这些数据存储在数字的二进制表示形式中,而不是存储在字符串中。因此,用户的权限将是一些十进制数字,该数字的每一位都表示对特定操作的权限
例如,我们的权限字符串1001
将只是十进制数9
(=1*2^0+0*2^1+0*2^2+1*2^3
)
我们可以将每个权限表示为二进制:
- 创建帖子=
1000
- 更新post=
0100
- 读取post=
0010
- 删除post=
0001
&
:
如果用户权限等于9
=1001
b,则:
,1001&1000=1000
–用户可以创建帖子1000>0
,1001&0100=0000
——用户无法更新帖子0000==0
,1001&0010=0000
——用户无法阅读帖子0000==0
,1001&0001=0001
–用户可以删除帖子0001>0
const operationMapping={1:'create',2:'read',4:'update',8:'delete',};设数字=[1,2,4,8];让结果=[];numbers.map(number=>{if((operationId&number)>0){result.push(operationMapping[number]);});返回结果代码>