diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 5ad41eeb..b8b962ca 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1063,15 +1063,23 @@ public class MemoryMessagesStore implements IMessagesStore { } if (oldInfo.getType() == ProtoConstants.GroupType.GroupType_Normal) { - if (oldInfo.getOwner() == null) { - return ErrorCode.ERROR_CODE_NOT_RIGHT; - } - if (!oldInfo.getOwner().equals(operator)) { - if (modifyType == Modify_Group_Extra) { + if (!operator.equals(oldInfo.getOwner())) { + WFCMessage.GroupMember gm = getGroupMember(groupId, operator); + boolean isManager = false; + if (gm != null && gm.getType() == GroupMemberType_Manager) { + isManager = true; + } + if (!isManager && modifyType != Modify_Group_Name && modifyType != Modify_Group_Portrait && modifyType != Modify_Group_Extra) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } } } + + if (oldInfo.getType() == ProtoConstants.GroupType.GroupType_Free) { + if (modifyType != Modify_Group_Name && modifyType != Modify_Group_Portrait && modifyType != Modify_Group_Extra) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + } }