docs-matrix-spec/locales/zh-Hans/rooms/fragments/v1-auth-rules.md
2025-04-20 16:13:37 +08:00

6.5 KiB
Raw Blame History

影响授权的状态事件类型包括:

{{% boxes/note %}} 如果未明确给出权限等级,则从默认值推断。 例如,提及 sender 的权限等级时,也可指代房间用户的默认权限等级。 {{% /boxes/note %}}

规则如下:

  1. 若类型为 m.room.create
    1. 若有任何 prev_events,则拒绝。
    2. room_id 的域名与 sender 的域名不符,则拒绝。
    3. content.room_version 存在但不是识别的版本,则拒绝。
    4. content 没有 creator 属性,则拒绝。
    5. 否则,允许。
  2. 针对事件的 auth_events
    1. 若某一 typestate_key 组合存在重复,则拒绝。
    2. 若存在其 typestate_key 不符合 认证事件选择 算法(详见服务器规范)的项,则拒绝。
    3. 若有事件本身因 接收 PDU 时执行的检查 被拒绝,则拒绝。
    4. 若未能在条目中找到 m.room.create 事件,则拒绝。
  3. 若房间状态中的 m.room.create 事件的 content 包含 m.federate 属性且值为 false,且此事件的 sender 域名不与创建事件的 sender 域名一致,则拒绝。
  4. 若类型为 m.room.aliases
    1. 若事件无 state_key,则拒绝。
    2. 若发送者域名与 state_key 不符,则拒绝。
    3. 否则,允许。
  5. 若类型为 m.room.member
    1. 若没有 state_key 属性,或 content 中无 membership 属性,则拒绝。
    2. membershipjoin
      1. 若唯一的前序事件为 m.room.createstate_key 为创建者,则允许。
      2. senderstate_key 不符,则拒绝。
      3. sender 被封禁,则拒绝。
      4. join_ruleinvite,则当 membership 状态是 invitejoin 时,允许。
      5. join_rulepublic,则允许。
      6. 否则,拒绝。
    3. membershipinvite
      1. content 含有 third_party_invite 属性:
        1. 目标用户 被封禁,则拒绝。
        2. content.third_party_invitesigned 属性,则拒绝。
        3. signedmxidtoken 属性,则拒绝。
        4. mxidstate_key 不符,则拒绝。
        5. 若当前房间状态中无 state_keytokenm.room.third_party_invite 事件,则拒绝。
        6. sender 与该 m.room.third_party_invitesender 不符,则拒绝。
        7. signed 中的任意签名与该 m.room.third_party_invite 事件中的任一公钥匹配,则允许。公钥位于 m.room.third_party_invitecontent 中:
          1. 单个公钥存于 public_key 属性;
          2. 公钥列表存于 public_keys 属性。
        8. 否则,拒绝。
      2. sender 当前成员状态不是 join,则拒绝。
      3. 目标用户 当前成员状态是 joinban,则拒绝。
      4. sender 权限等级大于或等于 邀请等级,则允许。
      5. 否则,拒绝。
    4. membershipleave
      1. senderstate_key 匹配,则仅当其当前成员状态为 invitejoin 时允许。
      2. sender 当前成员状态不是 join,则拒绝。
      3. 目标用户 当前成员状态为 bansender 权限等级低于 封禁等级,则拒绝。
      4. sender 权限等级大于等于 踢人等级,且 目标用户 权限等级小于 sender 权限等级,则允许。
      5. 否则,拒绝。
    5. membershipban
      1. sender 当前成员状态不是 join,则拒绝。
      2. sender 权限等级大于等于 封禁等级,且 目标用户 权限等级低于 sender 权限等级,则允许。
      3. 否则,拒绝。
    6. 其他情况下,未知成员状态。拒绝。
  6. sender 当前成员状态不是 join,则拒绝。
  7. 若类型为 m.room.third_party_invite
    1. 仅当 sender 当前权限等级大于等于 邀请等级 时允许。
  8. 若事件类型的 所需权限等级 大于 sender 权限等级,则拒绝。
  9. 若事件的 state_key@ 开头且与 sender 不符,则拒绝。
  10. 若类型为 m.room.power_levels
    1. contentusers 属性不是键为有效用户ID且值为整数或整数字符串的对象则拒绝。
    2. 若房间中没有前序的 m.room.power_levels 事件,则允许。
    3. 针对 users_defaultevents_defaultstate_defaultbanredactkickinvite 属性,在添加、更改或移除时,针对每个变动:
      1. 若当前值大于 sender 当前权限等级,则拒绝。
      2. 若新值大于 sender 当前权限等级,则拒绝。
    4. 针对 events 属性中被更改或移除的每一项:
      1. 若当前值大于 sender 当前权限等级,则拒绝。
    5. 针对 events 属性中被添加或更改的每一项:
      1. 若新值大于 sender 当前权限等级,则拒绝。
    6. 针对 users 属性(除 sender 本人)的被更改或移除的每一项:
      1. 若当前值大于等于 sender 当前权限等级,则拒绝。
    7. 针对 users 属性被添加或更改的每一项:
      1. 若新值大于 sender 当前权限等级,则拒绝。
    8. 否则,允许。
  11. 若类型为 m.room.redaction
    1. sender 权限等级大于等于 撤回等级,则允许。
    2. 若被撤回事件的 event_id 域名与 m.room.redactionevent_id 域名一致,则允许。
    3. 否则,拒绝。
  12. 否则,允许。

{{% boxes/note %}} 这些规则的部分后果:

  • 除非你是房间成员,否则唯一被允许的操作(除首次创建/加入外)为:加入公共房间、接受或拒绝对房间的邀请。
  • 取消封禁某人,你必须拥有大于等于踢人和封禁等级的权限,且你的权限等级高于目标用户。 {{% /boxes/note %}}