CB-422 Easy config fix (def options + admin permissions). Schema update

This commit is contained in:
Serge Rider
2020-10-20 16:44:42 +03:00
parent 87bd61216a
commit efd848b0bb
3 changed files with 37 additions and 22 deletions
@@ -9,18 +9,18 @@ CREATE TABLE CB_SERVER(
);
CREATE TABLE CB_AUTH_SUBJECT(
SUBJECT_ID VARCHAR(64) NOT NULL,
SUBJECT_ID VARCHAR(128) NOT NULL,
SUBJECT_TYPE VARCHAR(8) NOT NULL,
PRIMARY KEY(SUBJECT_ID)
);
CREATE TABLE CB_AUTH_PERMISSIONS(
SUBJECT_ID VARCHAR(32) NOT NULL,
SUBJECT_ID VARCHAR(128) NOT NULL,
PERMISSION_ID VARCHAR(64) NOT NULL,
GRANT_TIME TIMESTAMP NOT NULL,
GRANTED_BY VARCHAR(64) NOT NULL,
GRANTED_BY VARCHAR(128) NOT NULL,
PRIMARY KEY(SUBJECT_ID,PERMISSION_ID),
FOREIGN KEY(SUBJECT_ID) REFERENCES CB_AUTH_SUBJECT(SUBJECT_ID) ON DELETE CASCADE
@@ -28,17 +28,17 @@ CREATE TABLE CB_AUTH_PERMISSIONS(
CREATE TABLE CB_DATASOURCE_ACCESS(
DATASOURCE_ID VARCHAR(128) NOT NULL,
SUBJECT_ID VARCHAR(32) NOT NULL,
SUBJECT_ID VARCHAR(128) NOT NULL,
GRANT_TIME TIMESTAMP NOT NULL,
GRANTED_BY VARCHAR(64) NOT NULL,
GRANTED_BY VARCHAR(128) NOT NULL,
PRIMARY KEY(SUBJECT_ID,DATASOURCE_ID),
FOREIGN KEY(SUBJECT_ID) REFERENCES CB_AUTH_SUBJECT(SUBJECT_ID) ON DELETE CASCADE
);
CREATE TABLE CB_USER(
USER_ID VARCHAR(64) NOT NULL,
USER_ID VARCHAR(128) NOT NULL,
IS_ACTIVE CHAR(1) NOT NULL,
CREATE_TIME TIMESTAMP NOT NULL,
@@ -49,7 +49,7 @@ CREATE TABLE CB_USER(
-- Additional user properties (profile)
CREATE TABLE CB_USER_META(
USER_ID VARCHAR(64) NOT NULL,
USER_ID VARCHAR(128) NOT NULL,
META_ID VARCHAR(32) NOT NULL,
META_VALUE VARCHAR(1024),
@@ -58,7 +58,7 @@ CREATE TABLE CB_USER_META(
);
CREATE TABLE CB_ROLE(
ROLE_ID VARCHAR(32) NOT NULL,
ROLE_ID VARCHAR(128) NOT NULL,
ROLE_NAME VARCHAR(100) NOT NULL,
ROLE_DESCRIPTION VARCHAR(255) NOT NULL,
@@ -69,11 +69,11 @@ CREATE TABLE CB_ROLE(
);
CREATE TABLE CB_USER_ROLE(
USER_ID VARCHAR(64) NOT NULL,
ROLE_ID VARCHAR(32) NOT NULL,
USER_ID VARCHAR(128) NOT NULL,
ROLE_ID VARCHAR(128) NOT NULL,
GRANT_TIME TIMESTAMP NOT NULL,
GRANTED_BY VARCHAR(32) NOT NULL,
GRANTED_BY VARCHAR(128) NOT NULL,
PRIMARY KEY(USER_ID,ROLE_ID),
FOREIGN KEY(USER_ID) REFERENCES CB_USER(USER_ID) ON DELETE CASCADE,
@@ -97,7 +97,7 @@ CREATE TABLE CB_AUTH_CONFIGURATION(
);
CREATE TABLE CB_USER_CREDENTIALS(
USER_ID VARCHAR(64) NOT NULL,
USER_ID VARCHAR(128) NOT NULL,
PROVIDER_ID VARCHAR(32) NOT NULL,
CRED_ID VARCHAR(32) NOT NULL,
CRED_VALUE VARCHAR(1024) NOT NULL,
@@ -109,7 +109,7 @@ CREATE TABLE CB_USER_CREDENTIALS(
CREATE INDEX CB_USER_CREDENTIALS_SEARCH_IDX ON CB_USER_CREDENTIALS(PROVIDER_ID,CRED_ID);
CREATE TABLE CB_USER_STATE(
USER_ID VARCHAR(64) NOT NULL,
USER_ID VARCHAR(128) NOT NULL,
USER_CONFIGURATION TEXT NULL,
@@ -121,7 +121,7 @@ CREATE TABLE CB_USER_STATE(
CREATE TABLE CB_SESSION(
SESSION_ID VARCHAR(64) NOT NULL,
USER_ID VARCHAR(64) NULL,
USER_ID VARCHAR(128) NULL,
CREATE_TIME TIMESTAMP NOT NULL,
LAST_ACCESS_REMOTE_ADDRESS NULL,
@@ -172,6 +172,8 @@ public class CBDatabase {
// Create new admin user
if (!CommonUtils.isEmpty(adminName) && !CommonUtils.isEmpty(adminPassword)) {
createAdminUser(adminName, adminPassword);
} else {
grantAdminPermissionsToUser(adminName);
}
}
@@ -344,16 +346,21 @@ public class CBDatabase {
serverController.setUserCredentials(adminUser.getUserId(), authProvider, credentials);
}
// Grant all roles
WebRole[] allRoles = serverController.readAllRoles();
serverController.setUserRoles(
adminUser.getUserId(),
Arrays.stream(allRoles).map(WebRole::getRoleId).toArray(String[]::new),
adminUser.getUserId());
grantAdminPermissionsToUser(adminUser.getUserId());
return adminUser;
}
private void grantAdminPermissionsToUser(String userId) throws DBCException {
// Grant all roles
DBWSecurityController securityController = application.getSecurityController();
WebRole[] allRoles = securityController.readAllRoles();
securityController.setUserRoles(
userId,
Arrays.stream(allRoles).map(WebRole::getRoleId).toArray(String[]::new),
userId);
}
void shutdown() {
log.debug("Shutdown database");
if (cbDataSource != null) {
@@ -298,10 +298,18 @@ public class WebServiceAdmin implements DBWServiceAdmin {
appConfig.setAnonymousAccessEnabled(config.isAnonymousAccessEnabled());
appConfig.setAuthenticationEnabled(config.isAuthenticationEnabled());
appConfig.setSupportsCustomConnections(config.isCustomConnectionsEnabled());
String adminName = config.getAdminName();
String adminPassword = config.getAdminPassword();
if (CommonUtils.isEmpty(adminName)) {
// Grant admin permissions to the current user
WebUser curUser = webSession.getUser();
adminName = curUser == null ? null : curUser.getUserId();
adminPassword = null;
}
CBApplication.getInstance().finishConfiguration(
config.getServerName(),
config.getAdminName(),
config.getAdminPassword(),
adminName,
adminPassword,
config.getSessionExpireTime(),
appConfig);
// Refresh active session