stream_settings: Add can_delete_own_message_group setting.

Adds per-channel `can_delete_own_message_group` setting for
defining who can delete their own message in the channel.
This commit is contained in:
Vector73
2025-07-16 14:45:53 +00:00
committed by Tim Abbott
parent c4e641365b
commit 97a43fa6b6
23 changed files with 357 additions and 9 deletions

View File

@@ -91,6 +91,7 @@ class StreamDict(TypedDict, total=False):
can_add_subscribers_group: UserGroup | None
can_administer_channel_group: UserGroup | None
can_delete_any_message_group: UserGroup | None
can_delete_own_message_group: UserGroup | None
can_move_messages_out_of_channel_group: UserGroup | None
can_move_messages_within_channel_group: UserGroup | None
can_send_message_group: UserGroup | None
@@ -350,6 +351,7 @@ def create_stream_if_needed(
can_add_subscribers_group: UserGroup | None = None,
can_administer_channel_group: UserGroup | None = None,
can_delete_any_message_group: UserGroup | None = None,
can_delete_own_message_group: UserGroup | None = None,
can_move_messages_out_of_channel_group: UserGroup | None = None,
can_move_messages_within_channel_group: UserGroup | None = None,
can_send_message_group: UserGroup | None = None,
@@ -479,6 +481,7 @@ def create_streams_if_needed(
can_add_subscribers_group=stream_dict.get("can_add_subscribers_group", None),
can_administer_channel_group=stream_dict.get("can_administer_channel_group", None),
can_delete_any_message_group=stream_dict.get("can_delete_any_message_group", None),
can_delete_own_message_group=stream_dict.get("can_delete_own_message_group", None),
can_move_messages_out_of_channel_group=stream_dict.get(
"can_move_messages_out_of_channel_group", None
),
@@ -1172,6 +1175,15 @@ def can_delete_any_message_in_channel(user_profile: UserProfile, stream: Stream)
)
def can_delete_own_message_in_channel(user_profile: UserProfile, stream: Stream) -> bool:
return user_has_permission_for_group_setting(
stream.can_delete_own_message_group_id,
user_profile,
Stream.stream_permission_group_settings["can_delete_own_message_group"],
direct_member_only=False,
)
def can_move_messages_out_of_channel(user_profile: UserProfile, stream: Stream) -> bool:
if user_profile.is_realm_admin:
return True
@@ -1654,6 +1666,9 @@ def stream_to_dict(
can_delete_any_message_group = get_group_setting_value_for_register_api(
stream.can_delete_any_message_group_id, anonymous_group_membership
)
can_delete_own_message_group = get_group_setting_value_for_register_api(
stream.can_delete_own_message_group_id, anonymous_group_membership
)
can_move_messages_out_of_channel_group = get_group_setting_value_for_register_api(
stream.can_move_messages_out_of_channel_group_id, anonymous_group_membership
)
@@ -1682,6 +1697,7 @@ def stream_to_dict(
can_add_subscribers_group=can_add_subscribers_group,
can_administer_channel_group=can_administer_channel_group,
can_delete_any_message_group=can_delete_any_message_group,
can_delete_own_message_group=can_delete_own_message_group,
can_move_messages_out_of_channel_group=can_move_messages_out_of_channel_group,
can_move_messages_within_channel_group=can_move_messages_within_channel_group,
can_send_message_group=can_send_message_group,