mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-10-24 11:35:54 +08:00
CB-4196 add delete user functionality (#2121)
* CB-4196 add delete user functionality * CB-4196 review fixes * CB-4196 use div for Text component * CB-4196 add onDelete callback * CB-4197 delete user project after deleting user * CB-4196 add project deletion error to session log * CB-4196 make a disable dialog slightly larger * CB-4196 change button styles * CB-4197 add events for deleting user * CB-4197 code style fix --------- Co-authored-by: Alexey <wrouds@gmail.com> Co-authored-by: Ainur <yagudin10@yandex.ru> Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
This commit is contained in:
co-authored by
Alexey
Ainur
Evgenia Bezborodova
parent
dfd572aa4c
commit
a319b1fec3
+3
-1
@@ -56,6 +56,7 @@ import org.jkiss.utils.Pair;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.*;
|
||||
import java.text.MessageFormat;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.*;
|
||||
@@ -309,7 +310,8 @@ public class LocalResourceController implements RMController {
|
||||
RMProject project = makeProjectFromId(projectId, false);
|
||||
Path targetPath = getProjectPath(projectId);
|
||||
if (!Files.exists(targetPath)) {
|
||||
throw new DBException("Project '" + project.getName() + "' doesn't exists");
|
||||
log.debug(MessageFormat.format("Project folder ''{0}'' is not found", projectId));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
log.debug("Deleting project '" + projectId + "'");
|
||||
|
||||
-1
@@ -167,7 +167,6 @@ public abstract class BaseWebSession extends AbstractSessionPersistent {
|
||||
public void close() {
|
||||
super.close();
|
||||
var sessionExpiredEvent = new WSSessionExpiredEvent();
|
||||
application.getEventController().addEvent(sessionExpiredEvent);
|
||||
application.getEventController().addEvent(new WSEventDeleteTempFile(getSessionId()));
|
||||
synchronized (sessionEventHandlers) {
|
||||
for (CBWebSessionEventHandler sessionEventHandler : sessionEventHandlers) {
|
||||
|
||||
@@ -78,6 +78,9 @@
|
||||
<eventHandler class="io.cloudbeaver.server.events.WSDeleteTempFileHandler">
|
||||
<topic id="cb_delete_temp_folder"/>
|
||||
</eventHandler>
|
||||
<eventHandler class="io.cloudbeaver.server.events.WSUserDeletedEventHandler">
|
||||
<topic id="cb_user"/>
|
||||
</eventHandler>
|
||||
</extension>
|
||||
|
||||
</plugin>
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* DBeaver - Universal Database Manager
|
||||
* Copyright (C) 2010-2023 DBeaver Corp and others
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package io.cloudbeaver.server.events;
|
||||
|
||||
import io.cloudbeaver.server.CBPlatform;
|
||||
import org.jkiss.code.NotNull;
|
||||
import org.jkiss.dbeaver.model.websocket.WSEventHandler;
|
||||
import org.jkiss.dbeaver.model.websocket.event.WSUserDeletedEvent;
|
||||
|
||||
public class WSUserDeletedEventHandler<EVENT extends WSUserDeletedEvent> implements WSEventHandler<EVENT> {
|
||||
@Override
|
||||
public void handleEvent(@NotNull EVENT event) {
|
||||
CBPlatform.getInstance().getSessionManager().closeUserSessions(event.getDeletedUserId());
|
||||
}
|
||||
}
|
||||
+12
@@ -340,4 +340,16 @@ public class WebSessionManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void closeUserSessions(@NotNull String userId) {
|
||||
synchronized (sessionMap) {
|
||||
for (Iterator<BaseWebSession> iterator = sessionMap.values().iterator(); iterator.hasNext(); ) {
|
||||
var session = iterator.next();
|
||||
if (CommonUtils.equalObjects(session.getUserContext().getUserId(), userId)) {
|
||||
iterator.remove();
|
||||
session.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-1
@@ -43,6 +43,9 @@ import org.jkiss.dbeaver.model.app.DBPProject;
|
||||
import org.jkiss.dbeaver.model.auth.AuthInfo;
|
||||
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
|
||||
import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor;
|
||||
import org.jkiss.dbeaver.model.rm.RMProject;
|
||||
import org.jkiss.dbeaver.model.rm.RMProjectType;
|
||||
import org.jkiss.dbeaver.model.rm.RMUtils;
|
||||
import org.jkiss.dbeaver.model.security.*;
|
||||
import org.jkiss.dbeaver.model.security.user.SMTeam;
|
||||
import org.jkiss.dbeaver.model.security.user.SMUser;
|
||||
@@ -177,10 +180,16 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
webSession.addInfoMessage("Delete user - " + userName);
|
||||
try {
|
||||
webSession.getAdminSecurityController().deleteUser(userName);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
throw new DBWebException("Error deleting user", e);
|
||||
}
|
||||
try {
|
||||
webSession.getRmController().deleteProject(RMProjectType.USER + "_" + userName);
|
||||
} catch (DBException e) {
|
||||
log.error("Error deleting user project", e);
|
||||
webSession.addSessionError(e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+4
@@ -50,8 +50,10 @@ import org.jkiss.dbeaver.model.security.exception.SMException;
|
||||
import org.jkiss.dbeaver.model.security.exception.SMRefreshTokenExpiredException;
|
||||
import org.jkiss.dbeaver.model.security.user.*;
|
||||
import org.jkiss.dbeaver.model.sql.SQLUtils;
|
||||
import org.jkiss.dbeaver.model.websocket.event.WSUserDeletedEvent;
|
||||
import org.jkiss.dbeaver.model.websocket.event.permissions.WSObjectPermissionEvent;
|
||||
import org.jkiss.dbeaver.model.websocket.event.permissions.WSSubjectPermissionEvent;
|
||||
import org.jkiss.dbeaver.model.websocket.event.session.WSSessionExpiredEvent;
|
||||
import org.jkiss.utils.ArrayUtils;
|
||||
import org.jkiss.utils.CommonUtils;
|
||||
import org.jkiss.utils.SecurityUtils;
|
||||
@@ -211,6 +213,8 @@ public class CBEmbeddedSecurityController<T extends WebAuthApplication>
|
||||
} catch (SQLException e) {
|
||||
throw new DBCException("Error deleting user from database", e);
|
||||
}
|
||||
var event = new WSUserDeletedEvent(userId);
|
||||
application.getEventController().addEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user