]> granicus.if.org Git - ejabberd/commitdiff
Allow a subscribed owner/admin to change participant<->visitor
authorBadlop <badlop@process-one.net>
Thu, 20 Sep 2018 09:14:11 +0000 (11:14 +0200)
committerBadlop <badlop@process-one.net>
Tue, 25 Sep 2018 08:55:51 +0000 (10:55 +0200)
src/mod_muc_room.erl

index c4470968cf17e86f0a5556c7178ab1ad6d7d4717..fec21d2f59286f26689f2fe569c6194d23c542fe 100644 (file)
@@ -2862,8 +2862,13 @@ find_changed_items(UJID, UAffiliation, URole,
     TAffiliation = get_affiliation(JID, StateData),
     TRole = get_role(JID, StateData),
     ServiceAf = get_service_affiliation(JID, StateData),
+    UIsSubscriber = is_subscriber(UJID, StateData),
+    URole1 = case {URole, UIsSubscriber} of
+       {none, true} -> subscriber;
+       {UR, _} -> UR
+    end,
     CanChangeRA = case can_change_ra(UAffiliation,
-                                    URole,
+                                    URole1,
                                     TAffiliation,
                                     TRole, RoleOrAff, RoleOrAffValue,
                                     ServiceAf) of
@@ -2986,6 +2991,11 @@ can_change_ra(_FAffiliation, moderator, _TAffiliation,
 can_change_ra(_FAffiliation, moderator, _TAffiliation,
              visitor, role, participant, _ServiceAf) ->
     true;
+can_change_ra(FAffiliation, subscriber, _TAffiliation,
+             visitor, role, participant, _ServiceAf)
+    when (FAffiliation == owner) or
+          (FAffiliation == admin) ->
+    true;
 can_change_ra(FAffiliation, _FRole, _TAffiliation,
              visitor, role, moderator, _ServiceAf)
     when (FAffiliation == owner) or
@@ -2997,6 +3007,11 @@ can_change_ra(_FAffiliation, moderator, _TAffiliation,
 can_change_ra(_FAffiliation, moderator, _TAffiliation,
              participant, role, visitor, _ServiceAf) ->
     true;
+can_change_ra(FAffiliation, subscriber, _TAffiliation,
+             participant, role, visitor, _ServiceAf)
+    when (FAffiliation == owner) or
+          (FAffiliation == admin) ->
+    true;
 can_change_ra(FAffiliation, _FRole, _TAffiliation,
              participant, role, moderator, _ServiceAf)
     when (FAffiliation == owner) or