成员权限查询与判定
更新时间: 2024/05/22 16:22:08
服务器成员可同时属于多个身份组,同一权限在用户所属的多个身份组中的状态(开启、关闭或继承)不同时,用户实际拥有的最终权限遵循特定的判定规则。
查询成员权限
可调用如下方法查询服务器成员是否拥有某个或某些权限,无需了解具体的权限判定规则。
方法 | 说明 | 相关文档 |
---|---|---|
checkPermission:completion: |
用户可调用该方法查询自己是否拥有某个权限 | 查询自己是否拥有某个权限 |
checkPermissions:completion: |
用户可调用该方法查询自己是否拥有某些权限 | 查询自己是否拥有某些权限 |
判定规则
用户最终所拥有的权限的判定规则,在服务器维度和频道维度存在少许区别,具体见下文。
服务器维度的权限判定
服务器成员可同时属于多个身份组。成员在服务器维度拥有的最终权限为该成员所属的所有身份组权限经过特定规则综合判定后的结果,具体判定规则为:“取有不取无、多组取并集”。
服务器维度下,权限只有开启和关闭两种状态,假设某服务器中只有身份组A 和身份组B,身份组A 中权限1 为开启状态,身份组B 中权限1 为关闭状态,则权限1 对于同时从属于这两个身份组的用户而言,实际最终状态为“开启”,即该用户拥有权限1。
- 权限判定示例
假设某服务器的成员小云同时属于身份组A 和身份组B。身份组A 拥有前3个权限,身份组B 拥有后3个权限。 该场景下,小云最终拥有的权限集合为“前3个权限(因为身份组A)”与“后3个权限(因为身份组B)”的并集,具体如下表:
权限 | 身份组A | 身份组B | 小云在该服务器的最终权限 |
---|---|---|---|
权限1 | 开启 | 关闭 | 有 (因为身份组A) |
权限2 | 开启 | 关闭 | 有 (因为身份组A) |
权限3 | 开启 | 关闭 | 有 (因为身份组A) |
权限4 | 关闭 | 开启 | 有 (因为身份组B) |
权限5 | 关闭 | 开启 | 有 (因为身份组B) |
权限6 | 关闭 | 开启 | 有 (因为身份组B) |
服务器创建者默认拥有服务器维度下的所有权限。
- 权限判定流程
在服务器维度判定某成员是否拥有某权限的流程见下图。图中以权限A 作为示例,且图中“用户所在服务器身份组中权限A 的状态”指的是用户多个身份组中,权限A 经综合判定后的最终状态。
频道维度的权限判定
-
频道维度下,包含用户定制权限和频道身份组,前者用于针对单个用户进行定制化的权限控权,后者用于对频道成员进行统一的权限控制。
-
频道维度下的权限状态除了“开启”和“关闭”,还有“继承”,即继承同层级 @everyone 身份组中的相同权限的状态,或者继承上一个维度的身份组中相同权限的最终判定状态。具体层级及各层级的权限判定优先级为:单个用户层级(用户定制权限) > 频道层级(频道身份组) > 服务器层级(服务器自定义身份组优先于服务器@everyone身份组)。
在频道维度判定某成员是否拥有某权限的流程见下图。
图中以权限A 作为示例,且在图中,“权限A 在用户定制权限中的状态”和“权限A 在自定义身份组中的状态”,指的是用户多个身份组中,权限A 经综合判定后的最终状态(均指经过取有不取无、多组取并集后的最终状态)。