From 23871487e41ab25ab7582c7b6429ccfd3131562b Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Mon, 20 Feb 2023 19:27:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E7=94=A8=E6=88=B7=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=BE=A4=E7=BB=84=E4=BF=A1=E6=81=AF=E6=97=B6=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E4=B8=8D=E5=9C=A8=E7=BE=A4=E4=B8=AD=E8=BF=94=E5=9B=9E?= =?UTF-8?q?-1=EF=BC=8C=E5=A6=82=E6=9E=9C=E5=B7=B2=E7=BB=8F=E7=A6=BB?= =?UTF-8?q?=E5=BC=80=E7=BE=A4=E4=BA=86=E8=BF=94=E5=9B=9E=E7=A6=BB=E5=BC=80?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=9A=84=E8=B4=9F=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/moquette/imhandler/GetGroupInfoHandler.java | 2 +- .../io/moquette/persistence/MemoryMessagesStore.java | 10 +++++++++- .../src/main/java/io/moquette/spi/IMessagesStore.java | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java index 7f4e3d4e..78d56112 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java @@ -21,7 +21,7 @@ import java.util.List; public class GetGroupInfoHandler extends IMHandler { @Override public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.PullUserRequest request, Qos1PublishHandler.IMCallback callback) { - List infos = m_messagesStore.getGroupInfos(request.getRequestList()); + List infos = m_messagesStore.getGroupInfos(request.getRequestList(), fromUser, requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin); WFCMessage.PullGroupInfoResult result = WFCMessage.PullGroupInfoResult.newBuilder().addAllInfo(infos).build(); byte[] data = result.toByteArray(); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 8ca8f9b5..4a7230b4 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1886,7 +1886,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public List getGroupInfos(List requests) { + public List getGroupInfos(List requests, String fromUser, boolean isAdmin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); IMap mIMap = hzInstance.getMap(GROUPS_MAP); ArrayList out = new ArrayList<>(); @@ -1900,6 +1900,14 @@ public class MemoryMessagesStore implements IMessagesStore { } if (groupInfo != null && groupInfo.getUpdateDt() > request.getUpdateDt()) { + if(!isAdmin && !StringUtil.isNullOrEmpty(fromUser)) { + WFCMessage.GroupMember gm = getGroupMember(groupInfo.getTargetId(), fromUser); + if(gm == null) { + groupInfo = groupInfo.toBuilder().setMemberUpdateDt(-1).build(); + } else if(gm.getType() == GroupMemberType_Removed) { + groupInfo = groupInfo.toBuilder().setMemberUpdateDt(-groupInfo.getMemberUpdateDt()).build(); + } + } out.add(groupInfo); } } diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index cb07719e..24edb550 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -116,7 +116,7 @@ public interface IMessagesStore { ErrorCode modifyGroupInfo(String operator, String groupId, int modifyType, String value, boolean isAdmin); ErrorCode modifyGroupMemberAlias(String operator, String groupId, String alias, String memberId, boolean isAdmin); ErrorCode modifyGroupMemberExtra(String operator, String groupId, String extra, String memberId, boolean isAdmin); - List getGroupInfos(List requests); + List getGroupInfos(List requests, String fromUser, boolean isAdmin); WFCMessage.GroupInfo getGroupInfo(String groupId); Set getUserGroupIds(String userId); Set getCommonGroupIds(String userId1, String userId2);