From e59ec00ef5e6bd0899031fe88164bef482df0150 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Thu, 2 Sep 2021 12:31:13 +0300 Subject: [PATCH] CB-1001 Role users and connections API --- .../io/cloudbeaver/DBWSecurityController.java | 3 +++ .../server/CBSecurityController.java | 20 +++++++++++++++++++ .../schema/service.admin.graphqls | 3 +++ .../service/admin/AdminRoleInfo.java | 15 ++++++++++++++ 4 files changed, 41 insertions(+) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWSecurityController.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWSecurityController.java index 9f6340e471..53d5c62fdf 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWSecurityController.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWSecurityController.java @@ -83,6 +83,9 @@ public interface DBWSecurityController { WebRole[] findRoles(String roleName) throws DBCException; + @NotNull + String[] getRoleSubjects(String roleId) throws DBCException; + void createRole(WebRole role) throws DBCException; void updateRole(WebRole role) throws DBCException; diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBSecurityController.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBSecurityController.java index d635f5564f..5967e70817 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBSecurityController.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBSecurityController.java @@ -433,6 +433,26 @@ class CBSecurityController implements DBWSecurityController { return readAllRoles(); } + @NotNull + @Override + public String[] getRoleSubjects(String roleId) throws DBCException { + try (Connection dbCon = database.openConnection()) { + try (PreparedStatement dbStat = dbCon.prepareStatement( + "SELECT USER_ID FROM CB_USER_ROLE WHERE ROLE_ID")) { + dbStat.setString(1, roleId); + List subjects = new ArrayList<>(); + try (ResultSet dbResult = dbStat.executeQuery()) { + while (dbResult.next()) { + subjects.add(dbResult.getString(1)); + } + } + return subjects.toArray(new String[0]); + } + } catch (SQLException e) { + throw new DBCException("Error while reading role subjects", e); + } + } + @NotNull private WebRole fetchRole(ResultSet dbResult) throws SQLException { WebRole role = new WebRole(dbResult.getString("ROLE_ID")); diff --git a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls index b620d3c4a7..6e26ec7218 100644 --- a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls +++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls @@ -36,6 +36,9 @@ type AdminRoleInfo { roleName: String description: String + grantedUsers: [ID!]! + grantedConnections: [AdminConnectionGrantInfo!]! + rolePermissions: [ID]! } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminRoleInfo.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminRoleInfo.java index 1d6257df20..bbb17970ce 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminRoleInfo.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminRoleInfo.java @@ -16,7 +16,11 @@ */ package io.cloudbeaver.service.admin; +import io.cloudbeaver.DBWConnectionGrant; import io.cloudbeaver.model.user.WebRole; +import io.cloudbeaver.server.CBPlatform; +import org.jkiss.dbeaver.model.exec.DBCException; +import org.jkiss.dbeaver.model.meta.Property; import java.util.List; @@ -51,4 +55,15 @@ public class AdminRoleInfo { public void setRolePermissions(List rolePermissions) { this.rolePermissions = rolePermissions; } + + @Property + public DBWConnectionGrant[] getGrantedConnections() throws DBCException { + return CBPlatform.getInstance().getApplication().getSecurityController().getSubjectConnectionAccess(new String[] { getRoleId()} ); + } + + @Property + public String[] getGrantedUsers() throws DBCException { + return CBPlatform.getInstance().getApplication().getSecurityController().getRoleSubjects(getRoleId()); + } + }