muc: Re-allow non-admins to configure persistence (thanks Meaz)
authorMatthew Wild <mwild1@gmail.com>
Wed, 28 Sep 2022 17:47:00 +0100
changeset 12733 73a45ba6e3f1
parent 12732 931a2d049a91
child 12734 427dd01f0864
muc: Re-allow non-admins to configure persistence (thanks Meaz) Non-admins don't have a role on MUC services by default. Not even prosody:user. This meant they had no :create-persistent-room permission, even if muc_room_allow_persistent was true (the default). Now we only check the role permissions if persistent room creation is restricted, otherwise we skip any permission checks, just like previous versions.
plugins/muc/persistent.lib.lua
--- a/plugins/muc/persistent.lib.lua	Mon Sep 26 15:47:15 2022 +0100
+++ b/plugins/muc/persistent.lib.lua	Wed Sep 28 17:47:00 2022 +0100
@@ -8,10 +8,7 @@
 --
 
 local restrict_persistent = not module:get_option_boolean("muc_room_allow_persistent", true);
-module:default_permission(
-	restrict_persistent and "prosody:admin" or "prosody:user",
-	":create-persistent-room"
-);
+module:default_permission("prosody:admin", ":create-persistent-room"); -- Admins can always create, by default
 
 local function get_persistent(room)
 	return room._data.persistent;
@@ -25,7 +22,7 @@
 end
 
 module:hook("muc-config-form", function(event)
-	if not module:may(":create-persistent-room", event.actor) then
+	if restrict_persistent and not module:may(":create-persistent-room", event.actor) then
 		-- Hide config option if this user is not allowed to create persistent rooms
 		return;
 	end
@@ -39,7 +36,7 @@
 end, 100-5);
 
 module:hook("muc-config-submitted/muc#roomconfig_persistentroom", function(event)
-	if not module:may(":create-persistent-room", event.actor) then
+	if restrict_persistent and not module:may(":create-persistent-room", event.actor) then
 		return; -- Not allowed
 	end
 	if set_persistent(event.room, event.value) then