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 a607caab1f..8d752e5626 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWSecurityController.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWSecurityController.java @@ -17,6 +17,7 @@ package io.cloudbeaver; import io.cloudbeaver.model.session.WebSession; +import io.cloudbeaver.model.user.WebPermission; import io.cloudbeaver.model.user.WebRole; import io.cloudbeaver.model.user.WebUser; import io.cloudbeaver.registry.WebAuthProviderDescriptor; @@ -42,10 +43,14 @@ public interface DBWSecurityController { void setUserRoles(String userId, String[] roleIds, String grantorId) throws DBCException; + @NotNull WebRole[] getUserRoles(String userId) throws DBCException; WebUser getUserById(String userId) throws DBCException; + @NotNull + WebUser[] findUsers(String userNameMask) throws DBCException; + /////////////////////////////////////////// // Credentials @@ -69,8 +74,11 @@ public interface DBWSecurityController { /////////////////////////////////////////// // Roles + @NotNull WebRole[] readAllRoles() throws DBCException; + WebRole[] findRoles(String roleName) throws DBCException; + void createRole(WebRole role) throws DBCException; void deleteRole(String roleId) throws DBCException; @@ -80,10 +88,15 @@ public interface DBWSecurityController { void setSubjectPermissions(String subjectId, String[] permissionIds, String grantorId) throws DBCException; + @NotNull Set getSubjectPermissions(String subjectId) throws DBCException; + @NotNull Set getUserPermissions(String userId) throws DBCException; + @NotNull + WebPermission[] getAllPermissions(); + /////////////////////////////////////////// // Sessions @@ -94,7 +107,8 @@ public interface DBWSecurityController { void updateSession(WebSession session) throws DBCException; /////////////////////////////////////////// - // Meta info + // Permissions + /////////////////////////////////////////// // Utils diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebRole.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebRole.java index 23444ad139..c42e7915a9 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebRole.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebRole.java @@ -30,7 +30,6 @@ public class WebRole implements WebAuthSubject { private String roleId; private String name; - private String icon; private String description; private Set permissions = new LinkedHashSet<>(); @@ -43,10 +42,6 @@ public class WebRole implements WebAuthSubject { return roleId; } - public void setRoleId(String id) { - this.roleId = id; - } - public String getName() { return name; } @@ -55,14 +50,6 @@ public class WebRole implements WebAuthSubject { this.name = name; } - public String getIcon() { - return icon; - } - - public void setIcon(String icon) { - this.icon = icon; - } - public String getDescription() { return description; } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUser.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUser.java index 8943002f73..d3084a2098 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUser.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUser.java @@ -35,7 +35,7 @@ public class WebUser implements WebAuthSubject { private Map metaParameters = new LinkedHashMap<>(); private Map configurationParameters = new LinkedHashMap<>(); - private Set roles = new LinkedHashSet<>(); + private WebRole[] roles = null; private String activeAuthModel; private Map> authCredentials = new HashMap<>(); @@ -61,7 +61,7 @@ public class WebUser implements WebAuthSubject { } public String[] getGrantedRoles() { - return roles.stream().map(WebRole::getRoleId).toArray(String[]::new); + return Arrays.stream(roles).map(WebRole::getRoleId).toArray(String[]::new); } public Map getMetaParameters() { @@ -72,8 +72,12 @@ public class WebUser implements WebAuthSubject { return Collections.unmodifiableMap(configurationParameters); } - public Set getRoles() { - return Collections.unmodifiableSet(roles); + public WebRole[] getRoles() { + return roles; + } + + public void setRoles(WebRole[] roles) { + this.roles = roles; } @Override 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 4d328b09b1..10afd7e202 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 @@ -18,6 +18,7 @@ package io.cloudbeaver.server; import io.cloudbeaver.DBWSecurityController; import io.cloudbeaver.model.session.WebSession; +import io.cloudbeaver.model.user.WebPermission; import io.cloudbeaver.model.user.WebRole; import io.cloudbeaver.model.user.WebUser; import io.cloudbeaver.registry.WebAuthProviderDescriptor; @@ -102,6 +103,7 @@ class CBSecurityController implements DBWSecurityController { } } + @NotNull @Override public WebRole[] getUserRoles(String userId) throws DBCException { try (Connection dbCon = database.openConnection()) { @@ -137,6 +139,28 @@ class CBSecurityController implements DBWSecurityController { } } + @NotNull + @Override + public WebUser[] findUsers(String userNameMask) throws DBCException { + try (Connection dbCon = database.openConnection()) { + try (PreparedStatement dbStat = dbCon.prepareStatement("SELECT * FROM CB_USER" + + (CommonUtils.isEmpty(userNameMask) ? "" : " WHERE USER_ID=?"))) { + if (!CommonUtils.isEmpty(userNameMask)) { + dbStat.setString(1, userNameMask); + } + try (ResultSet dbResult = dbStat.executeQuery()) { + List result = new ArrayList<>(); + while (dbResult.next()) { + result.add(new WebUser(dbResult.getString(1))); + } + return result.toArray(new WebUser[0]); + } + } + } catch (SQLException e) { + throw new DBCException("Error while searching credentials", e); + } + } + /////////////////////////////////////////// // Credentials @@ -273,6 +297,7 @@ class CBSecurityController implements DBWSecurityController { /////////////////////////////////////////// // Roles + @NotNull @Override public WebRole[] readAllRoles() throws DBCException { try (Connection dbCon = database.openConnection()) { @@ -301,6 +326,11 @@ class CBSecurityController implements DBWSecurityController { } } + @Override + public WebRole[] findRoles(String roleName) throws DBCException { + return readAllRoles(); + } + @NotNull private WebRole fetchRole(ResultSet dbResult) throws SQLException { WebRole role = new WebRole(dbResult.getString("ROLE_ID")); @@ -357,6 +387,7 @@ class CBSecurityController implements DBWSecurityController { } } + @NotNull @Override public Set getSubjectPermissions(String subjectId) throws DBCException { try (Connection dbCon = database.openConnection()) { @@ -375,6 +406,7 @@ class CBSecurityController implements DBWSecurityController { } } + @NotNull @Override public Set getUserPermissions(String userId) throws DBCException { try (Connection dbCon = database.openConnection()) { @@ -404,6 +436,12 @@ class CBSecurityController implements DBWSecurityController { } } + @NotNull + @Override + public WebPermission[] getAllPermissions() { + return new WebPermission[0]; + } + /////////////////////////////////////////// // Sessions diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java index e64526882e..e97c4ecd4e 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java @@ -99,6 +99,11 @@ public abstract class WebServiceBindingBase impleme getServletRequest(env)); } + protected static WebSession getWebSession(DataFetchingEnvironment env, boolean errorOnNotFound) throws DBWebException { + return CBPlatform.getInstance().getSessionManager().getWebSession( + getServletRequest(env), errorOnNotFound); + } + protected static WebSession findWebSession(DataFetchingEnvironment env) { return CBPlatform.getInstance().getSessionManager().findWebSession( getServletRequest(env)); 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 e39636656f..da3ad0fc2a 100644 --- a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls +++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls @@ -1,6 +1,6 @@ type AdminUserInfo { - userName: ID! + userId: ID! metaParameters: Object! configurationParameters: Object! @@ -8,7 +8,8 @@ type AdminUserInfo { } type AdminRoleInfo { - roleName: ID! + roleId: ID! + roleName: String rolePermissions: [ID]! } @@ -24,15 +25,15 @@ type AdminPermissionInfo { extend type Query { - listUsers(userName: ID): [AdminUserInfo]! - listRoles(roleName: ID): [AdminRoleInfo]! - listPermissions(permissionId: ID): [AdminPermissionInfo]! + listUsers(userId: ID): [AdminUserInfo]! + listRoles(roleId: ID): [AdminRoleInfo]! + listPermissions: [AdminPermissionInfo]! - createUser(userName: ID!): AdminUserInfo! - deleteUser(userName: ID!): Boolean + createUser(userId: ID!): AdminUserInfo! + deleteUser(userId: ID!): Boolean - createRole(roleName: ID!): AdminRoleInfo! - deleteRole(roleName: ID!): Boolean + createRole(roleId: ID!): AdminRoleInfo! + deleteRole(roleId: ID!): Boolean grantUserRole(user: ID!, role: ID!): Boolean revokeUserRole(user: ID!, role: ID!): Boolean diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissionInfo.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissionInfo.java index 2e06d00e5f..f188e55358 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissionInfo.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissionInfo.java @@ -16,18 +16,21 @@ */ package io.cloudbeaver.service.admin; +import io.cloudbeaver.model.user.WebPermission; + /** * Web permission ID */ public class AdminPermissionInfo { - private String id; + private final WebPermission permission; + + public AdminPermissionInfo(WebPermission permission) { + this.permission = permission; + } public String getId() { - return id; + return permission.getId(); } - public void setId(String id) { - this.id = id; - } } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/AdminPermissions.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java similarity index 94% rename from server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/AdminPermissions.java rename to server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java index 80e3b6754e..421cf175e9 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/AdminPermissions.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.cloudbeaver.service.admin.impl; +package io.cloudbeaver.service.admin; /** * Web service implementation 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 199474c8c7..19153ccf81 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,6 +16,8 @@ */ package io.cloudbeaver.service.admin; +import io.cloudbeaver.model.user.WebRole; + import java.util.List; /** @@ -23,15 +25,19 @@ import java.util.List; */ public class AdminRoleInfo { - private String roleName; + private final WebRole role; private List rolePermissions; - public String getRoleName() { - return roleName; + public AdminRoleInfo(WebRole role) { + this.role = role; } - public void setRoleName(String roleName) { - this.roleName = roleName; + public String getRoleId() { + return role.getRoleId(); + } + + public String getRoleName() { + return role.getName(); } public List getRolePermissions() { diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminUserInfo.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminUserInfo.java index b545a708df..76d99b1645 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminUserInfo.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminUserInfo.java @@ -16,7 +16,11 @@ */ package io.cloudbeaver.service.admin; -import java.util.List; +import io.cloudbeaver.model.user.WebRole; +import io.cloudbeaver.model.user.WebUser; +import io.cloudbeaver.server.CBPlatform; +import org.jkiss.dbeaver.model.exec.DBCException; + import java.util.Map; /** @@ -24,42 +28,33 @@ import java.util.Map; */ public class AdminUserInfo { - private String userName; + private final WebUser user; private Map metaParameters; private Map configurationParameters; - private List grantedRoles; - - public String getUserName() { - return userName; + public AdminUserInfo(WebUser user) { + this.user = user; } - public void setUserName(String userName) { - this.userName = userName; + public String getUserId() { + return user.getUserId(); } public Map getMetaParameters() { return metaParameters; } - public void setMetaParameters(Map metaParameters) { - this.metaParameters = metaParameters; - } - public Map getConfigurationParameters() { return configurationParameters; } - public void setConfigurationParameters(Map configurationParameters) { - this.configurationParameters = configurationParameters; + public String[] getGrantedRoles() throws DBCException { + if (user.getRoles() == null) { + WebRole[] userRoles = CBPlatform.getInstance().getApplication().getSecurityController().getUserRoles(getUserId()); + user.setRoles(userRoles); + } + return user.getGrantedRoles(); } - public List getGrantedRoles() { - return grantedRoles; - } - - public void setGrantedRoles(List grantedRoles) { - this.grantedRoles = grantedRoles; - } } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java index b7cf24a1f3..1a5203687b 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java @@ -18,6 +18,10 @@ package io.cloudbeaver.service.admin; import io.cloudbeaver.DBWService; import io.cloudbeaver.DBWebException; +import io.cloudbeaver.WebAction; +import io.cloudbeaver.model.session.WebSession; +import org.jkiss.code.NotNull; +import org.jkiss.code.Nullable; import java.util.List; @@ -26,19 +30,39 @@ import java.util.List; */ public interface DBWServiceAdmin extends DBWService { - List listUsers(String userName) throws DBWebException; - List listRoles(String roleName) throws DBWebException; - List listPermissions(String permissionId) throws DBWebException; + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + @NotNull + List listUsers(@NotNull WebSession webSession, @Nullable String userName) throws DBWebException; - AdminUserInfo createUser(String userName) throws DBWebException; - boolean deleteUser(String userName) throws DBWebException; + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + @NotNull + List listRoles(@NotNull WebSession webSession, @Nullable String roleName) throws DBWebException; - AdminRoleInfo createRole(String roleName) throws DBWebException; - boolean deleteRole(String roleName) throws DBWebException; + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + @NotNull + List listPermissions(@NotNull WebSession webSession) throws DBWebException; - boolean grantUserRole(String user, String role) throws DBWebException; - boolean revokeUserRole(String user, String role) throws DBWebException; + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + @NotNull + AdminUserInfo createUser(@NotNull WebSession webSession, String userName) throws DBWebException; - boolean setRolePermissions(String roleID, String[] permissions) throws DBWebException; + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + boolean deleteUser(@NotNull WebSession webSession, String userName) throws DBWebException; + + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + @NotNull + AdminRoleInfo createRole(@NotNull WebSession webSession, String roleName) throws DBWebException; + + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + boolean deleteRole(@NotNull WebSession webSession, String roleName) throws DBWebException; + + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + boolean grantUserRole(@NotNull WebSession webSession, String user, String role) throws DBWebException; + + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + boolean revokeUserRole(@NotNull WebSession webSession, String user, String role) throws DBWebException; + + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + boolean setRolePermissions(@NotNull WebSession webSession, String roleID, String[] permissions) throws DBWebException; } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java index 675e0c2052..2253708558 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java @@ -16,7 +16,6 @@ */ package io.cloudbeaver.service.admin; -import graphql.schema.idl.TypeDefinitionRegistry; import io.cloudbeaver.DBWebException; import io.cloudbeaver.service.DBWBindingContext; import io.cloudbeaver.service.WebServiceBindingBase; @@ -35,9 +34,16 @@ public class WebServiceBindingAdmin extends WebServiceBindingBase { - throw new DBWebException("Not implemented"); - }); + model.getQueryType().dataFetcher("listUsers", + env -> getService(env).listUsers(getWebSession(env), env.getArgument("userName"))); + model.getQueryType().dataFetcher("listRoles", + env -> getService(env).listRoles(getWebSession(env), env.getArgument("roleName"))); + model.getQueryType().dataFetcher("listPermissions", + env -> getService(env).listPermissions(getWebSession(env))); + model.getQueryType().dataFetcher("createUser", + env -> getService(env).createUser(getWebSession(env), env.getArgument("userId"))); + model.getQueryType().dataFetcher("deleteUser", + env -> getService(env).deleteUser(getWebSession(env), env.getArgument("userId"))); } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java index 7a59cc9684..95d1ad584c 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java @@ -17,11 +17,18 @@ package io.cloudbeaver.service.admin.impl; import io.cloudbeaver.DBWebException; +import io.cloudbeaver.model.session.WebSession; +import io.cloudbeaver.model.user.WebPermission; +import io.cloudbeaver.model.user.WebRole; +import io.cloudbeaver.model.user.WebUser; +import io.cloudbeaver.server.CBPlatform; import io.cloudbeaver.service.admin.AdminPermissionInfo; import io.cloudbeaver.service.admin.AdminRoleInfo; import io.cloudbeaver.service.admin.AdminUserInfo; import io.cloudbeaver.service.admin.DBWServiceAdmin; +import org.jkiss.code.NotNull; +import java.util.ArrayList; import java.util.List; /** @@ -30,53 +37,93 @@ import java.util.List; public class WebServiceAdmin implements DBWServiceAdmin { + @NotNull @Override - public List listUsers(String userName) throws DBWebException { + public List listUsers(@NotNull WebSession webSession, String userName) throws DBWebException { + try { + List webUsers = new ArrayList<>(); + for (WebUser user : CBPlatform.getInstance().getApplication().getSecurityController().findUsers(userName)) { + webUsers.add(new AdminUserInfo(user)); + } + return webUsers; + } catch (Exception e) { + throw new DBWebException("Error reading users", e); + } + } + + @NotNull + @Override + public List listRoles(@NotNull WebSession webSession, String roleName) throws DBWebException { + try { + List webUsers = new ArrayList<>(); + for (WebRole role : CBPlatform.getInstance().getApplication().getSecurityController().findRoles(roleName)) { + webUsers.add(new AdminRoleInfo(role)); + } + return webUsers; + } catch (Exception e) { + throw new DBWebException("Error reading users", e); + } + } + + @NotNull + @Override + public List listPermissions(@NotNull WebSession webSession) throws DBWebException { + try { + List permissionInfos = new ArrayList<>(); + for (WebPermission permission : CBPlatform.getInstance().getApplication().getSecurityController().getAllPermissions()) { + permissionInfos.add(new AdminPermissionInfo(permission)); + } + return permissionInfos; + } catch (Exception e) { + throw new DBWebException("Error reading users", e); + } + } + + @NotNull + @Override + public AdminUserInfo createUser(@NotNull WebSession webSession, String userName) throws DBWebException { + try { + WebUser newUser = new WebUser(userName); + CBPlatform.getInstance().getApplication().getSecurityController().createUser(newUser); + return new AdminUserInfo(newUser); + } catch (Exception e) { + throw new DBWebException("Error reading users", e); + } + } + + @Override + public boolean deleteUser(@NotNull WebSession webSession, String userName) throws DBWebException { + try { + CBPlatform.getInstance().getApplication().getSecurityController().deleteUser(userName); + return true; + } catch (Exception e) { + throw new DBWebException("Error reading users", e); + } + } + + @NotNull + @Override + public AdminRoleInfo createRole(@NotNull WebSession webSession, String roleName) throws DBWebException { throw new DBWebException("Feature not supported"); } @Override - public List listRoles(String roleName) throws DBWebException { + public boolean deleteRole(@NotNull WebSession webSession, String roleName) throws DBWebException { throw new DBWebException("Feature not supported"); } @Override - public List listPermissions(String permissionId) throws DBWebException { + public boolean grantUserRole(@NotNull WebSession webSession, String user, String role) throws DBWebException { throw new DBWebException("Feature not supported"); } @Override - public AdminUserInfo createUser(String userName) throws DBWebException { + public boolean revokeUserRole(@NotNull WebSession webSession, String user, String role) throws DBWebException { throw new DBWebException("Feature not supported"); } @Override - public boolean deleteUser(String userName) throws DBWebException { - throw new DBWebException("Feature not supported"); - } - - @Override - public AdminRoleInfo createRole(String roleName) throws DBWebException { - throw new DBWebException("Feature not supported"); - } - - @Override - public boolean deleteRole(String roleName) throws DBWebException { - throw new DBWebException("Feature not supported"); - } - - @Override - public boolean grantUserRole(String user, String role) throws DBWebException { - throw new DBWebException("Feature not supported"); - } - - @Override - public boolean revokeUserRole(String user, String role) throws DBWebException { - throw new DBWebException("Feature not supported"); - } - - @Override - public boolean setRolePermissions(String roleID, String[] permissions) throws DBWebException { + public boolean setRolePermissions(@NotNull WebSession webSession, String roleID, String[] permissions) throws DBWebException { throw new DBWebException("Feature not supported"); } }