add default_power_level_content_override config option. (#12618)
Co-authored-by: Matthew Hodgson <matthew@matrix.org>
1 files changed, 47 insertions, 0 deletions
diff --git a/synapse/config/room.py b/synapse/config/room.py
index e18a87ea37..462d85ac1d 100644
--- a/synapse/config/room.py
+++ b/synapse/config/room.py
@@ -63,6 +63,19 @@ class RoomConfig(Config):
"Invalid value for encryption_enabled_by_default_for_room_type"
)
+ self.default_power_level_content_override = config.get(
+ "default_power_level_content_override",
+ None,
+ )
+ if self.default_power_level_content_override is not None:
+ for preset in self.default_power_level_content_override:
+ if preset not in vars(RoomCreationPreset).values():
+ raise ConfigError(
+ "Unrecognised room preset %s in default_power_level_content_override"
+ % preset
+ )
+ # We validate the actual overrides when we try to apply them.
+
def generate_config_section(self, **kwargs: Any) -> str:
return """\
## Rooms ##
@@ -83,4 +96,38 @@ class RoomConfig(Config):
# will also not affect rooms created by other servers.
#
#encryption_enabled_by_default_for_room_type: invite
+
+ # Override the default power levels for rooms created on this server, per
+ # room creation preset.
+ #
+ # The appropriate dictionary for the room preset will be applied on top
+ # of the existing power levels content.
+ #
+ # Useful if you know that your users need special permissions in rooms
+ # that they create (e.g. to send particular types of state events without
+ # needing an elevated power level). This takes the same shape as the
+ # `power_level_content_override` parameter in the /createRoom API, but
+ # is applied before that parameter.
+ #
+ # Valid keys are some or all of `private_chat`, `trusted_private_chat`
+ # and `public_chat`. Inside each of those should be any of the
+ # properties allowed in `power_level_content_override` in the
+ # /createRoom API. If any property is missing, its default value will
+ # continue to be used. If any property is present, it will overwrite
+ # the existing default completely (so if the `events` property exists,
+ # the default event power levels will be ignored).
+ #
+ #default_power_level_content_override:
+ # private_chat:
+ # "events":
+ # "com.example.myeventtype" : 0
+ # "m.room.avatar": 50
+ # "m.room.canonical_alias": 50
+ # "m.room.encryption": 100
+ # "m.room.history_visibility": 100
+ # "m.room.name": 50
+ # "m.room.power_levels": 100
+ # "m.room.server_acl": 100
+ # "m.room.tombstone": 100
+ # "events_default": 1
"""
|