Make the Make Room Admin API choose to puppet the room creator in v12 rooms (#18805)

This commit is contained in:
Andrew Morgan 2025-08-12 11:11:03 +01:00 committed by GitHub
parent 3db9fa3eeb
commit 526b875e03
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 35 additions and 1 deletions

1
changelog.d/18805.bugfix Normal file
View File

@ -0,0 +1 @@
Fix bug where the [Make Room Admin API](https://element-hq.github.io/synapse/latest/admin_api/rooms.html#make-room-admin-api) would not treat a room v12's creator power level as the highest in room.

View File

@ -634,7 +634,7 @@ class MakeRoomAdminRestServlet(ResolveRoomIdMixin, RestServlet):
for creator in creators:
if self.is_mine_id(creator):
# include the creator as they won't be in the PL users map.
admin_users.insert(0, creator)
admin_users.append(creator)
if not admin_users:
raise SynapseError(

View File

@ -2917,6 +2917,39 @@ class MakeRoomAdminTestCase(unittest.HomeserverTestCase):
)
self.assertEquals(pl["users"][self.admin_user], 100)
def test_v12_room_with_many_user_pls(self) -> None:
"""Test that you can be promoted to the admin user's PL in v12 rooms that contain a range of user PLs."""
room_id = self.helper.create_room_as(
self.creator,
tok=self.creator_tok,
room_version=RoomVersions.V12.identifier,
is_public=True,
extra_content={
"power_level_content_override": {
"users": {
self.second_user_id: 50,
},
},
},
)
self.helper.join(room_id, self.admin_user, tok=self.admin_user_tok)
self.helper.join(room_id, self.second_user_id, tok=self.second_tok)
channel = self.make_request(
"POST",
f"/_synapse/admin/v1/rooms/{room_id}/make_room_admin",
content={},
access_token=self.admin_user_tok,
)
self.assertEqual(200, channel.code, msg=channel.json_body)
pl = self.helper.get_state(
room_id, EventTypes.PowerLevels, tok=self.creator_tok
)
self.assertEquals(pl["users"][self.admin_user], 100)
class BlockRoomTestCase(unittest.HomeserverTestCase):
servlets = [