Add more considerations

travis/msc/user-redact
Travis Ralston 6 months ago
parent b9391a028b
commit 6d92bbaa5b

@ -12,26 +12,23 @@ all of that user's events should be redacted in addition to being kicked or bann
protected from redaction itself, so may have some consistency issues, but overall should still provide
relatively high amounts of protection to rooms.
This proposal is exploratory and subject to change. Implementations may validate the idea through
early feature support, but MUST expect that things will change (or become completely rejected).
## Proposal
A new flag is added to [`m.room.member`](https://spec.matrix.org/v1.14/client-server-api/#mroommember)
events where the target user is kicked or banned (**TODO**: Allow on self-leaves too?): `redact_events`.
This flag is a boolean and, when `true`, causes servers (and clients) to redact all of the user's events
as though they received an [`m.room.redaction`](https://spec.matrix.org/v1.14/client-server-api/#mroomredaction),
including adding [`redacted_because`](https://spec.matrix.org/v1.14/client-server-api/#redactions) to
`unsigned` where applicable. An `m.room.redaction` event is not actually sent, however.
events where the target user is kicked or banned: `redact_events`. This flag is a boolean and, when
`true`, causes servers (and clients) to redact all of the user's events as though they received an
[`m.room.redaction`](https://spec.matrix.org/v1.14/client-server-api/#mroomredaction), including
adding [`redacted_because`](https://spec.matrix.org/v1.14/client-server-api/#redactions) to `unsigned`
where applicable. An `m.room.redaction` event is not actually sent, however.
**Note**: This also means that if the user was kicked/banned with a `reason`, that event is automatically
compatible with the redaction `reason` field and shows up accordingly.
Similar to regular redactions, if the sender of the membership event can't actually redact the target's
events, the redaction doesn't apply. This means having a power level higher than or equal to `redacts`
*and* `events["m.room.redaction"]` (if set). Normally, `m.room.redaction` events could be rejected
due to the power levels - that rejection behaviour doesn't apply with the `redact_events` field.
Instead, the target's events are simply not redacted.
*and* `events["m.room.redaction"]` (if set). We maintain the `events` check despite not actually sending
events of that type to keep the same expectations within rooms. If the sender doesn't have permission
to redact an event normally, no redaction is applied.
If the sender is allowed to redact, the redaction behaviour continues until the membership event itself
is redacted (thus removing the field) or another membership event removes the field. For example, if
@ -67,6 +64,28 @@ The new field is proxied through to the event by the [`/kick`](https://spec.matr
and [`/ban`](https://spec.matrix.org/v1.14/client-server-api/#post_matrixclientv3roomsroomidban)
sugar APIs, like `reason` is.
## Fallback behaviour
Servers which don't support this feature may be served redacted events over federation when attempting
to fill gaps or backfill. This is considered expected behaviour.
Clients which don't support this feature may see events remain unredacted until they clear their local
cache. Upon clearing or invalidating their cache, they will either receive redacted events if their
server supports the feature or unredacted events otherwise.
To (primarily) help protect users on unsupported *clients*, implementations SHOULD continue to try
sending individual redaction events in addition to the redact-on-ban flag. They MAY cease to do so
once they are comfortable with the level of adoption for this proposal. Servers in particular SHOULD
assist clients and send individual redaction events on their behalf, meaning clients SHOULD wait a
little bit before trying to issue redactions themselves. For example, a client may ban a user, wait
a minute, then start sending redactions if it hasn't seen an `m.room.redaction` event targeting some
of the banned user's events. Servers MAY deduplicate redactions to lower federation load, as they
always could.
**Note**: It is possible due to implementation and real-world constraints that not all individual
redactions will "make it" over federation to another server. This is why mass redaction approaches
are preferred, as they are significantly more reliable.
## Potential issues
It's a little annoying that the flag is redacted when the membership event is redacted, however it's
@ -85,6 +104,11 @@ This should mean that those clients will still receive the event.
Servers which miss the event will eventually receive or retrieve it, just like they would with any
other event.
Moderation bots/clients which attempt to reduce the amount of duplicate work they do may need to
inspect `redacted_because` instead of checking for its presence to determine which kind of redaction
was applied to a given event. This is especially true if the moderation bot/client is providing the
fallback support described above.
## Alternatives
Mass redactions are the cited major alternative, where a single event can target approximately 1500
@ -92,6 +116,13 @@ other events in the room. New rooms can benefit from that functionality, especia
covered by this proposal, while existing rooms can be given an option to protect their users with
relative ease.
## Future considerations
It may be desirable to place this behaviour on self-leaves too, allowing for faster removal of one's
own messages/events. This proposal doesn't suggest adding this functionality here to maintain narrow
scope on T&S functionality. A future proposal may introduce this, or rely on regular mass redactions
instead.
## Security considerations
As the room moderator/administrator would already send redactions, and may still for full protection,

Loading…
Cancel
Save