添加配置当销毁用户时是否销毁用户信息和消息

This commit is contained in:
heavyrian2012
2025-11-22 23:02:56 +08:00
parent 47039f53b2
commit 24d24fe1e9
5 changed files with 69 additions and 24 deletions
+10
View File
@@ -267,6 +267,16 @@ group.enable_mark_deletion true
## 销毁用户时,用户信息会被清空,deleted字段设置为1,这个开关控制是否保留用户昵称,默认为true。
user.keep_display_name_when_destroy true
## 销毁用户时deleted字段设置为1,这个开关控制是否保留其他信息,默认是false。
user.keep_full_info_when_destroy false
## 销毁用户时,如果user.keep_full_info_when_destroy为true,会保留所有信息,这个开关控制是否保留这个用户信息的电话号码,默认为false。
## 当保留所有信息且保留电话号码时,用户如果再注册会用到原来的UID,能够看到原来用户的消息,需要考虑一下是否让已删除用户再次注册登录看到之前的消息。
user.keep_mobile_when_destroy false
## 销毁用户时是否保留归属于这个用户的所有消息记录,默认为false。
user.keep_messages_when_destroy false
# 好友/好友请求/用户设置 这三类数据同步的最大条目数。之前是客户第一次登录时,会把所有的对应数据一次下载到客户端,但如果有特别多的信息,会导致无法同步到客户端,
# 因此需要分段多次同步,此开关定义了每次同步的数据的条数。此需要客户端支持,客户端SDK在2021.5.25日后支持此功能。如果确认所有客户端都在这个日志之后才可以打开此设置。
#sync.data_part_size 1000
@@ -213,6 +213,9 @@ public final class BrokerConstants {
public static final String USER_HIDE_PROPERTIES = "user.hide_properties";
public static final String USER_KEEP_DISPLAY_NAME_WHEN_DESTROY = "user.keep_display_name_when_destroy";
public static final String USER_KEEP_FULL_INFO_WHEN_DESTROY = "user.keep_full_info_when_destroy";
public static final String USER_KEEP_MOBILE_WHEN_DESTROY = "user.keep_mobile_when_destroy";
public static final String USER_KEEP_MESSAGES_WHEN_DESTROY = "user.keep_messages_when_destroy";
public static final String SYNC_Data_Part_Size = "sync.data_part_size";
@@ -202,6 +202,10 @@ public class MemoryMessagesStore implements IMessagesStore {
private int mGroupForbiddenClientOperation;
private int mSyncDataPartSize = 0;
private boolean keepDisplayNameWhenDestroyUser = true;
private boolean keepFullInfoWhenDestroyUser = false;
private boolean keepMobileWhenDestroyUser = false;
private boolean keepMessagesWhenDestroyUser = false;
private String mRecallForwardUrl = null;
private boolean mBroadcastTargetFromUserTable = false;
@@ -600,6 +604,17 @@ public class MemoryMessagesStore implements IMessagesStore {
} catch (Exception e) {
}
try {
keepFullInfoWhenDestroyUser = "true".equals(server.getConfig().getProperty(USER_KEEP_FULL_INFO_WHEN_DESTROY));
} catch (Exception e) {}
try {
keepMobileWhenDestroyUser = "true".equals(server.getConfig().getProperty(USER_KEEP_MOBILE_WHEN_DESTROY));
} catch (Exception e) {}
try {
keepMessagesWhenDestroyUser = "true".equals(server.getConfig().getProperty(USER_KEEP_MESSAGES_WHEN_DESTROY));
} catch (Exception e) {}
try {
@@ -2758,8 +2773,9 @@ public class MemoryMessagesStore implements IMessagesStore {
} finally {
mWriteLock.unlock();
}
databaseStore.clearUserMessage(userId);
if(!keepMessagesWhenDestroyUser) {
databaseStore.clearUserMessage(userId);
}
}
@Override
@@ -3137,37 +3153,29 @@ public class MemoryMessagesStore implements IMessagesStore {
IMap<String, WFCMessage.User> mUserMap = hzInstance.getMap(USERS);
WFCMessage.User us = mUserMap.get(userId);
if (us != null) {
if (keepDisplayNameWhenDestroyUser) {
us = WFCMessage.User.newBuilder()
.setUid(userId)
.setUpdateDt(System.currentTimeMillis())
.setName(userId)
.setDeleted(1)
.clearAddress()
.clearCompany()
.clearEmail()
.clearExtra()
.clearMobile()
.clearPortrait()
.clearSocial()
.build();
WFCMessage.User.Builder builder = WFCMessage.User.newBuilder().setUpdateDt(System.currentTimeMillis()).setDeleted(1);
if(keepFullInfoWhenDestroyUser) {
if(!keepMobileWhenDestroyUser) {
builder.clearMobile();
}
} else {
us = WFCMessage.User.newBuilder()
.setUid(userId)
.setUpdateDt(System.currentTimeMillis())
builder.setUid(userId)
.setName(userId)
.setDeleted(1)
.clearDisplayName()
.clearAddress()
.clearCompany()
.clearEmail()
.clearExtra()
.clearMobile()
.clearPortrait()
.clearSocial()
.build();
.clearGender()
.clearSocial();
if (!keepDisplayNameWhenDestroyUser) {
builder.clearDisplayName();
}
}
us = builder.build();
try {
databaseStore.updateUser(us);
} catch (Exception e) {
@@ -3176,8 +3184,8 @@ public class MemoryMessagesStore implements IMessagesStore {
}
mUserMap.put(userId, us);
}
}
@Override
public void updateUserInfo(WFCMessage.User user) throws Exception {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();