diff --git a/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java index ae2b1388..9f99a1d4 100644 --- a/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java @@ -31,7 +31,7 @@ public class QuitGroupHandler extends GroupHandler return ErrorCode.ERROR_CODE_NOT_RIGHT; } - ErrorCode errorCode = m_messagesStore.quitGroup(fromUser, request.getGroupId()); + ErrorCode errorCode = m_messagesStore.quitGroup(fromUser, request.getGroupId(), isAdmin); if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index efd47e3c..a7fb085e 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1420,7 +1420,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public ErrorCode quitGroup(String operator, String groupId) { + public ErrorCode quitGroup(String operator, String groupId, boolean admin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); IMap mIMap = hzInstance.getMap(GROUPS_MAP); @@ -1439,6 +1439,10 @@ public class MemoryMessagesStore implements IMessagesStore { } return ErrorCode.ERROR_CODE_NOT_EXIST; } + + if(!admin && groupInfo.getType() == ProtoConstants.GroupType.GroupType_Organization) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } if (groupInfo.getType() != ProtoConstants.GroupType.GroupType_Free && groupInfo.getOwner() != null && groupInfo.getOwner().equals(operator)) { MultiMap groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS); diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 4030ba79..a8295926 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -110,7 +110,7 @@ public interface IMessagesStore { WFCMessage.GroupInfo createGroup(String operator, WFCMessage.GroupInfo groupInfo, List memberList, String memberExtra, boolean isAdmin); ErrorCode addGroupMembers(String operator, boolean isAdmin, String groupId, List memberList, String extra); ErrorCode kickoffGroupMembers(String operator, boolean isAdmin, String groupId, List memberList); - ErrorCode quitGroup(String operator, String groupId); + ErrorCode quitGroup(String operator, String groupId, boolean admin); void clearUserGroups(String userId); ErrorCode dismissGroup(String operator, String groupId, boolean isAdmin); ErrorCode modifyGroupInfo(String operator, String groupId, int modifyType, String value, boolean isAdmin);