首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不和谐位权限计算器

不和谐位权限计算器
EN

Stack Overflow用户
提问于 2017-10-30 16:17:41
回答 2查看 2.9K关注 0票数 0

我试图让我的工具/脚本确定登录用户是否拥有使用该工具的正确权限。然而,不和谐的反应是允许的int。

似乎我必须使用逐位运算符检查权限,但从我搜索或搜索的所有内容来看,我发现的几乎所有内容似乎都完全无关紧要。

示例权限:2146958591

权限引用;

// General generalCreateInstantInvite: 0x1, generalKickMembers: 0x2, generalBanMembers: 0x4, generalAdministrator: 0x8, generalManageChannels: 0x10, generalManageServer: 0x20, generalChangeNickname: 0x4000000, generalManageNicknames: 0x8000000, generalManageRoles: 0x10000000, generalManageWebhooks: 0x20000000, generalManageEmojis: 0x40000000, generalViewAuditLog: 0x80, // Text textAddReactions: 0x40, textReadMessages: 0x400, textSendMessages: 0x800, textSendTTSMessages: 0x1000, textManageMessages: 0x2000, textEmbedLinks: 0x4000, textAttachFiles: 0x8000, textReadMessageHistory: 0x10000, textMentionEveryone: 0x20000, textUseExternalEmojis: 0x40000, // Voice voiceViewChannel: 0x400, voiceConnect: 0x100000, voiceSpeak: 0x200000, voiceMuteMembers: 0x400000, voiceDeafenMembers: 0x800000, voiceMoveMembers: 0x1000000, voiceUseVAD: 0x2000000是否有一个工具或样例脚本,我可以研究,以确定如何进行计算?

提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-30 16:45:32

假设您有不同的4操作,您希望允许或不允许每个用户:

  • 创建职位
  • 更新员额
  • 读帖
  • 删除员额。

让我们创建一个10的4个字符字符串。字符串中的第一个字符表示用户对create post操作的可能性。第二个字符- update post,第三- read post和第四- delete post.例如,如果用户拥有1001权限,那么他可以创建posts和删除posts,但不能更新和读取。

存储这些权限的最有效方法是什么?我们在字符串的每个位置都只有01,所以我们可以将这些数据存储在字符串中,而是存储在数字的二进制表示中。因此,用户的权限将是一些十进制数,这个数字的每一点都将表示特定操作的权限。

例如,我们的权限字符串1001将只是十进制数9 (= 1*2^0 + 0*2^1 + 0*2^2 + 1*2^3)。

我们可以将每个权限表示为二进制:

  • 创建post = 1000
  • 更新post = 0100
  • 读post = 0010
  • 删除post = 0001

但是,如何检查用户是否具有特定权限或具有一组权限?很简单,让我们使用按位运算符&

如果用户权限等于9 = 1001b,那么:

  • 1001 & 1000 = 10001000 > 0 -用户可以创建文章
  • 1001 & 0100 = 00000000 == 0 -用户不能更新帖子
  • 1001 & 0010 = 00000000 == 0 -用户无法阅读帖子
  • 1001 & 0001 = 00010001 > 0 -用户可以删除帖子
票数 6
EN

Stack Overflow用户

发布于 2017-10-30 16:28:16

若要检查给定的权限值是否具有选定的权限,请使用按位和运算符。

这方面的例子:

代码语言:javascript
运行
复制
$canKickMembers = ($permissionCode & 0x2) != 0;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47019863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档