mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
Merge remote-tracking branch 'origin/devel' into devel
This commit is contained in:
+11
-1
@@ -76,6 +76,7 @@ class CBSecurityController implements DBWSecurityController {
|
||||
@Override
|
||||
public void deleteUser(String userId) throws DBCException {
|
||||
try (Connection dbCon = database.openConnection()) {
|
||||
deleteAuthSubject(dbCon, userId);
|
||||
JDBCUtils.executeStatement(dbCon, "DELETE FROM CB_USER WHERE USER_ID=?", userId);
|
||||
} catch (SQLException e) {
|
||||
throw new DBCException("Error deleting user from database", e);
|
||||
@@ -106,7 +107,9 @@ class CBSecurityController implements DBWSecurityController {
|
||||
@Override
|
||||
public WebRole[] getUserRoles(String userId) throws DBCException {
|
||||
try (Connection dbCon = database.openConnection()) {
|
||||
try (PreparedStatement dbStat = dbCon.prepareStatement("SELECT * FROM CB_USER_ROLE WHERE USER_ID=?")) {
|
||||
try (PreparedStatement dbStat = dbCon.prepareStatement(
|
||||
"SELECT R.* FROM CB_USER_ROLE UR,CB_ROLE R " +
|
||||
"WHERE UR.USER_ID=? AND UR.ROLE_ID=R.ROLE_ID")) {
|
||||
dbStat.setString(1, userId);
|
||||
List<WebRole> roles = new ArrayList<>();
|
||||
try (ResultSet dbResult = dbStat.executeQuery()) {
|
||||
@@ -357,6 +360,7 @@ class CBSecurityController implements DBWSecurityController {
|
||||
@Override
|
||||
public void deleteRole(String roleId) throws DBCException {
|
||||
try (Connection dbCon = database.openConnection()) {
|
||||
deleteAuthSubject(dbCon, roleId);
|
||||
JDBCUtils.executeStatement(dbCon, "DELETE FROM CB_ROLE WHERE ROLE_ID=?", roleId);
|
||||
} catch (SQLException e) {
|
||||
throw new DBCException("Error deleting role from database", e);
|
||||
@@ -558,5 +562,11 @@ class CBSecurityController implements DBWSecurityController {
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteAuthSubject(Connection dbCon, String subjectId) throws SQLException {
|
||||
try (PreparedStatement dbStat = dbCon.prepareStatement("DELETE FROM CB_AUTH_SUBJECT WHERE SUBJECT_ID=?")) {
|
||||
dbStat.setString(1, subjectId);
|
||||
dbStat.execute();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -50,9 +50,9 @@ public class WebServiceBindingAdmin extends WebServiceBindingBase<DBWServiceAdmi
|
||||
env -> getService(env).deleteRole(getWebSession(env), env.getArgument("roleId")));
|
||||
|
||||
model.getQueryType().dataFetcher("grantUserRole",
|
||||
env -> getService(env).grantUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("userId")));
|
||||
env -> getService(env).grantUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId")));
|
||||
model.getQueryType().dataFetcher("revokeUserRole",
|
||||
env -> getService(env).revokeUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("userId")));
|
||||
env -> getService(env).revokeUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId")));
|
||||
model.getQueryType().dataFetcher("setRolePermissions",
|
||||
env -> getService(env).setRolePermissions(getWebSession(env), env.getArgument("roleId"), env.getArgument("permissions")));
|
||||
model.getQueryType().dataFetcher("setUserCredentials",
|
||||
|
||||
+8
@@ -31,6 +31,7 @@ import io.cloudbeaver.service.admin.AdminUserInfo;
|
||||
import io.cloudbeaver.service.admin.DBWServiceAdmin;
|
||||
import org.jkiss.code.NotNull;
|
||||
import org.jkiss.utils.ArrayUtils;
|
||||
import org.jkiss.utils.CommonUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -104,6 +105,9 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
|
||||
@Override
|
||||
public boolean deleteUser(@NotNull WebSession webSession, String userName) throws DBWebException {
|
||||
if (CommonUtils.equalObjects(userName, webSession.getUser().getUserId())) {
|
||||
throw new DBWebException("You cannot delete yourself");
|
||||
}
|
||||
try {
|
||||
CBPlatform.getInstance().getApplication().getSecurityController().deleteUser(userName);
|
||||
return true;
|
||||
@@ -130,6 +134,10 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
@Override
|
||||
public boolean deleteRole(@NotNull WebSession webSession, String roleId) throws DBWebException {
|
||||
try {
|
||||
WebRole[] userRoles = CBPlatform.getInstance().getApplication().getSecurityController().getUserRoles(webSession.getUser().getUserId());
|
||||
if (Arrays.stream(userRoles).anyMatch(webRole -> webRole.getRoleId().equals(roleId))) {
|
||||
throw new DBWebException("You can not delete your own role");
|
||||
}
|
||||
CBPlatform.getInstance().getApplication().getSecurityController().deleteRole(roleId);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
|
||||
Reference in New Issue
Block a user