From b93c76c6c7d31de2bfff3164d2ef169b20d41740 Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Mon, 3 Apr 2023 13:33:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BE=A4=E7=BB=84=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=E9=80=BB=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/MemoryMessagesStore.java | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 74b084e9..4bb48195 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2179,9 +2179,10 @@ public class MemoryMessagesStore implements IMessagesStore { if (isAdmin) { canRecall = true; } - if (!isAdmin && message.getFromUser().equals(operatorId)) { + boolean isExpired = false; + if (!canRecall && message.getFromUser().equals(operatorId)) { if (now - message.getServerTimestamp() > mRecallTimeLimit * 1000) { - return ErrorCode.ERROR_CODE_RECALL_TIME_EXPIRED; + isExpired = true; } else { canRecall = true; } @@ -2198,17 +2199,26 @@ public class MemoryMessagesStore implements IMessagesStore { canRecall = true; } - MultiMap groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS); - Collection members = groupMembers.get(message.getConversation().getTarget()); - if (members == null || members.size() == 0) { - members = loadGroupMemberFromDB(hzInstance, message.getConversation().getTarget()); - } - for (WFCMessage.GroupMember member : members) { - if (member.getMemberId().equals(operatorId)) { - if (member.getType() == GroupMemberType_Manager || member.getType() == ProtoConstants.GroupMemberType.GroupMemberType_Owner) { - canRecall = true; + if(!canRecall && !message.getFromUser().equals(operatorId)) { + boolean isOperatorManager = false; + int senderType = GroupMemberType_Normal; + MultiMap groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS); + Collection members = groupMembers.get(message.getConversation().getTarget()); + if (members == null || members.size() == 0) { + members = loadGroupMemberFromDB(hzInstance, message.getConversation().getTarget()); + } + for (WFCMessage.GroupMember member : members) { + if (member.getMemberId().equals(operatorId)) { + if (member.getType() == GroupMemberType_Manager || member.getType() == ProtoConstants.GroupMemberType.GroupMemberType_Owner) { + isOperatorManager = true; + } } - break; + if(member.getMemberId().equals(message.getFromUser())) { + senderType = member.getType(); + } + } + if(isOperatorManager && senderType != GroupMemberType_Manager && senderType != GroupMemberType_Owner) { + canRecall = true; } } } @@ -2220,7 +2230,11 @@ public class MemoryMessagesStore implements IMessagesStore { } if (!canRecall) { - return ErrorCode.ERROR_CODE_NOT_RIGHT; + if(isExpired) { + return ErrorCode.ERROR_CODE_RECALL_TIME_EXPIRED; + } else { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } } if(message.getContent().getType() == 80) {