Update translations
This commit is contained in:
parent
4af1379d1e
commit
1030e735c0
96 changed files with 13449 additions and 0 deletions
111
locales/zh-Hans/rooms/fragments/v8-auth-rules.md
Normal file
111
locales/zh-Hans/rooms/fragments/v8-auth-rules.md
Normal file
|
@ -0,0 +1,111 @@
|
|||
事件必须由 `sender` 属性指示的服务器进行签名。
|
||||
|
||||
影响授权的状态事件类型包括:
|
||||
|
||||
- [`m.room.create`](/client-server-api#mroomcreate)
|
||||
- [`m.room.member`](/client-server-api#mroommember)
|
||||
- [`m.room.join_rules`](/client-server-api#mroomjoin_rules)
|
||||
- [`m.room.power_levels`](/client-server-api#mroompower_levels)
|
||||
- [`m.room.third_party_invite`](/client-server-api#mroomthird_party_invite)
|
||||
|
||||
{{% boxes/note %}}
|
||||
当未明确提供时,权限级别将从默认值推断。例如,提及 `sender` 的权限级别也可以指房间中用户的默认权限级别。
|
||||
{{% /boxes/note %}}
|
||||
|
||||
{{% boxes/note %}}
|
||||
`m.room.redaction` 事件与其他事件一样需遵守授权规则。实际上,这意味着除非 `m.room.power_levels` 事件通过 `events` 或 `events_default` 属性为 `m.room.redaction` 事件设置了权限级别要求,否则通常会被授权规则允许。特别地,_redact level_ **不会**被授权规则考虑在内。
|
||||
|
||||
能够发送撤回事件并不意味着应执行撤回。接收服务器必须执行额外的检查,详见[处理撤回](#handling-redactions)章节。
|
||||
{{% /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. 如果对于某个 `type` 和 `state_key` 对存在重复条目,则拒绝。
|
||||
2. 如果存在条目的 `type` 和 `state_key` 与[授权事件选择](/server-server-api#auth-events-selection)算法(按服务器规范描述)指定的不符,则拒绝。
|
||||
3. 如果存在条目本身按[接收 PDU 时执行的检查](/server-server-api/#checks-performed-on-receipt-of-a-pdu)被拒绝,则拒绝。
|
||||
4. 如果条目中没有 `m.room.create` 事件,则拒绝。
|
||||
3. 如果房间状态中的 `m.room.create` 事件的 `content` 属性 `m.federate` 为 `false`,并且该事件的 `sender` 域与创建事件的 `sender` 域不匹配,则拒绝。
|
||||
4. 如果类型为 `m.room.member`:
|
||||
1. 如果没有 `state_key` 属性,或 `content` 中没有 `membership` 属性,则拒绝。
|
||||
2. {{% added-in v=8 %}}
|
||||
如果 `content` 中有 `join_authorised_via_users_server` 属性:
|
||||
1. 如果事件未被该 key 标识的用户 ID 的 homeserver 有效签名,则拒绝。
|
||||
3. 如果 `membership` 为 `join`:
|
||||
1. 如果唯一先前事件为 `m.room.create` 且 `state_key` 为创建者,则允许。
|
||||
2. 如果 `sender` 与 `state_key` 不匹配,则拒绝。
|
||||
3. 如果 `sender` 被封禁,则拒绝。
|
||||
4. 如果 `join_rule` 为 `invite` 或 `knock`,当成员状态为 `invite` 或 `join` 时允许。
|
||||
5. {{% added-in v=8 %}}
|
||||
如果 `join_rule` 为 `restricted`:
|
||||
1. 如果成员状态为 `join` 或 `invite`,则允许。
|
||||
2. 如果 `content` 中的 `join_authorised_via_users_server` key 不是有足够权限邀请其它用户的用户,则拒绝。
|
||||
3. 否则,允许。
|
||||
6. 如果 `join_rule` 为 `public`,允许。
|
||||
7. 否则,拒绝。
|
||||
4. 如果 `membership` 为 `invite`:
|
||||
1. 如果 `content` 包含 `third_party_invite` 属性:
|
||||
1. 如果*目标用户*被封禁,则拒绝。
|
||||
2. 如果 `content.third_party_invite` 没有 `signed` 属性,则拒绝。
|
||||
3. 如果 `signed` 没有 `mxid` 和 `token` 属性,则拒绝。
|
||||
4. 如果 `mxid` 不等于 `state_key`,则拒绝。
|
||||
5. 如果当前房间状态中没有 `state_key` 与 `token` 匹配的 `m.room.third_party_invite` 事件,则拒绝。
|
||||
6. 如果 `sender` 与 `m.room.third_party_invite` 的 `sender` 不匹配,则拒绝。
|
||||
7. 如果 `signed` 中的任一签名与 `m.room.third_party_invite` 事件中的任何公钥匹配,则允许。公钥位于 `m.room.third_party_invite` 的 `content` 中:
|
||||
1. 在 `public_key` 属性中为单个公钥。
|
||||
2. 在 `public_keys` 属性中为公钥列表。
|
||||
8. 否则,拒绝。
|
||||
2. 如果 `sender` 当前成员状态不是 `join`,则拒绝。
|
||||
3. 如果*目标用户*的当前成员状态为 `join` 或 `ban`,则拒绝。
|
||||
4. 如果 `sender` 的权限级别大于或等于*邀请级别*,允许。
|
||||
5. 否则,拒绝。
|
||||
5. 如果 `membership` 为 `leave`:
|
||||
1. 如果 `sender` 与 `state_key` 匹配,且该用户当前的成员状态为 `invite`、`join` 或 `knock` 时允许,否则拒绝。
|
||||
2. 如果 `sender` 当前成员状态不是 `join`,则拒绝。
|
||||
3. 如果*目标用户*的当前成员状态为 `ban` 且 `sender` 的权限级别低于*封禁级别*,则拒绝。
|
||||
4. 如果 `sender` 的权限级别大于或等于*踢出级别*,且*目标用户*的权限级别低于 `sender`,则允许。
|
||||
5. 否则,拒绝。
|
||||
6. 如果 `membership` 为 `ban`:
|
||||
1. 如果 `sender` 当前成员状态不是 `join`,则拒绝。
|
||||
2. 如果 `sender` 的权限级别大于或等于*封禁级别*,且*目标用户*的权限级别低于 `sender`,则允许。
|
||||
3. 否则,拒绝。
|
||||
7. 如果 `membership` 为 `knock`:
|
||||
1. 如果 `join_rule` 不是 `knock`,则拒绝。
|
||||
2. 如果 `sender` 与 `state_key` 不匹配,则拒绝。
|
||||
3. 如果 `sender` 当前的成员状态不是 `ban`、`invite` 或 `join`,则允许。
|
||||
4. 否则,拒绝。
|
||||
8. 否则,成员状态未知。拒绝。
|
||||
5. 如果 `sender` 当前的成员状态不是 `join`,拒绝。
|
||||
6. 如果类型为 `m.room.third_party_invite`:
|
||||
1. 只有当 `sender` 当前的权限级别大于或等于*邀请级别*时,允许。
|
||||
7. 如果事件类型的*所需权限级别*大于 `sender` 的权限级别,拒绝。
|
||||
8. 如果事件含有以 `@` 开头的 `state_key` 且与 `sender` 不匹配,则拒绝。
|
||||
9. 如果类型为 `m.room.power_levels`:
|
||||
1. 如果 `content` 中 `users` 属性不是一个有效的对象(主键为合法用户 ID,值为整数或可转为整数的字符串),则拒绝。
|
||||
2. 如果房间中没有之前的 `m.room.power_levels` 事件,允许。
|
||||
3. 对于 `users_default`、`events_default`、`state_default`、`ban`、`redact`、`kick`、`invite` 属性,检查它们是否有新增、更改或移除。对每个更改项:
|
||||
1. 如果当前值高于 `sender` 当前权限级别,则拒绝。
|
||||
2. 如果新值高于 `sender` 当前权限级别,则拒绝。
|
||||
4. 针对 `events` 或 `notifications` 属性中被更改或移除的每个条目:
|
||||
1. 如果当前值大于 `sender` 当前权限级别,则拒绝。
|
||||
5. 对于向 `events` 或 `notifications` 属性新增或更改的每个条目:
|
||||
1. 如果新值大于 `sender` 当前权限级别,则拒绝。
|
||||
6. 除了 `sender` 自身的条目外,对 `users` 属性被更改或移除的每个条目:
|
||||
1. 如果当前值大于等于 `sender` 当前权限级别,则拒绝。
|
||||
7. 对于向 `users` 属性新增或更改的每个条目:
|
||||
1. 如果新值大于 `sender` 当前权限级别,则拒绝。
|
||||
8. 否则,允许。
|
||||
10. 否则,允许。
|
||||
|
||||
{{% boxes/note %}}
|
||||
这些规则的一些结果:
|
||||
|
||||
- 除非你是房间成员,否则唯一被允许的操作(除初始创建/加入外)为:加入公开房间、接受或拒绝房间邀请。
|
||||
- 要解除某人的封禁,你必须拥有大于等于踢出*和*封禁级别的权限级别,*且*比目标用户的权限级别高。
|
||||
{{% /boxes/note %}}
|
Loading…
Add table
Add a link
Reference in a new issue