获取群成员列表时检查群成员权限

This commit is contained in:
imhao183
2020-08-12 14:58:28 +08:00
parent 584eb094f3
commit bb5b6fac17
4 changed files with 24 additions and 4 deletions
@@ -46,7 +46,7 @@ public class GetGroupMembersAction extends AdminAction {
&& (!StringUtil.isNullOrEmpty(inputGetGroup.getGroupId()))) {
List<WFCMessage.GroupMember> members = new ArrayList<>();
ErrorCode errorCode = messagesStore.getGroupMembers(inputGetGroup.getGroupId(), 0, members);
ErrorCode errorCode = messagesStore.getGroupMembers(null, inputGetGroup.getGroupId(), 0, members);
response.setStatus(HttpResponseStatus.OK);
@@ -24,7 +24,7 @@ public class GetGroupMemberHandler extends IMHandler<WFCMessage.PullGroupMemberR
@Override
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.PullGroupMemberRequest request, Qos1PublishHandler.IMCallback callback) {
List<WFCMessage.GroupMember> members = new ArrayList<>();
ErrorCode errorCode = m_messagesStore.getGroupMembers(request.getTarget(), request.getHead(), members);
ErrorCode errorCode = m_messagesStore.getGroupMembers(fromUser, request.getTarget(), request.getHead(), members);
if (errorCode == ERROR_CODE_SUCCESS) {
WFCMessage.PullGroupMemberResult result = WFCMessage.PullGroupMemberResult.newBuilder().addAllMember(members).build();
@@ -1237,7 +1237,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public ErrorCode getGroupMembers(String groupId, long maxDt, List<WFCMessage.GroupMember> members) {
public ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List<WFCMessage.GroupMember> members) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
IMap<String, WFCMessage.GroupInfo> mIMap = hzInstance.getMap(GROUPS_MAP);
@@ -1253,10 +1253,30 @@ public class MemoryMessagesStore implements IMessagesStore {
if (memberCollection == null || memberCollection.size() == 0) {
memberCollection = loadGroupMemberFromDB(hzInstance, groupId);
}
boolean notInGroup = true;
WFCMessage.GroupMember self = null;
for (WFCMessage.GroupMember member:memberCollection) {
if (member.getUpdateDt() > maxDt) {
members.add(member);
}
if (fromUser != null && notInGroup) {
if (member.getMemberId().equals(fromUser)) {
if (member.getType() != GroupMemberType_Removed) {
notInGroup = false;
} else {
self = member;
break;
}
}
}
}
//server api fromUser is null
if (fromUser != null && notInGroup) {
members.clear();
if (self != null) {
members.add(self.toBuilder().setUpdateDt(0).setType(GroupMemberType_Normal).build());
}
}
return ErrorCode.ERROR_CODE_SUCCESS;
@@ -115,7 +115,7 @@ public interface IMessagesStore {
List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> requests);
WFCMessage.GroupInfo getGroupInfo(String groupId);
Set<String> getUserGroupIds(String userId);
ErrorCode getGroupMembers(String groupId, long maxDt, List<WFCMessage.GroupMember> members);
ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List<WFCMessage.GroupMember> members);
WFCMessage.GroupMember getGroupMember(String groupId, String memberId);
ErrorCode transferGroup(String operator, String groupId, String newOwner, boolean isAdmin);
ErrorCode setGroupManager(String operator, String groupId, int type, List<String> userList, boolean isAdmin);