diff --git a/console/src/main/java/com/arcadedb/console/Console.java b/console/src/main/java/com/arcadedb/console/Console.java index 581e6c5254..9278a98047 100644 --- a/console/src/main/java/com/arcadedb/console/Console.java +++ b/console/src/main/java/com/arcadedb/console/Console.java @@ -467,16 +467,25 @@ private void executeCreateUser(final String params) { checkHasSpaces("User name", userName); final String password; - final List databases; + Map databases = new HashMap(); if (databasesByPos > -1) { password = params.substring(identifiedByPos + "IDENTIFIED BY".length() + 1, databasesByPos).trim(); final String databasesList = params.substring(databasesByPos + " GRANT CONNECT TO ".length()).trim(); final String[] databasesArray = databasesList.split(","); - databases = List.of(databasesArray); + final List databasesName = List.of(databasesArray); + for (final String db : databasesName) { + final int colonPos = db.indexOf(":"); + if (colonPos > -1) { + final String dbname = db.substring(0,colonPos -1).trim(); + final String dbgroup = db.substring(colonPos + 1).trim(); + databases.put(dbname,dbgroup); + } else { + databases.put(db,"admin"); + } + } } else { password = params.substring(identifiedByPos + "IDENTIFIED BY".length() + 1).trim(); - databases = new ArrayList<>(); } checkIsEmpty("User password", password); diff --git a/console/src/test/java/com/arcadedb/console/RemoteConsoleIT.java b/console/src/test/java/com/arcadedb/console/RemoteConsoleIT.java index 7e44e9c51c..87ec6f82d4 100644 --- a/console/src/test/java/com/arcadedb/console/RemoteConsoleIT.java +++ b/console/src/test/java/com/arcadedb/console/RemoteConsoleIT.java @@ -198,6 +198,7 @@ public void testUserMgmt() throws IOException { } Assertions.assertTrue(console.parse("create user elon identified by musk grant connect to db1")); + Assertions.assertTrue(console.parse("create user jeff identified by amazon grant connect to db1:readonly")); Assertions.assertTrue(console.parse("drop user elon")); } diff --git a/network/src/main/java/com/arcadedb/remote/RemoteServer.java b/network/src/main/java/com/arcadedb/remote/RemoteServer.java index 634f0122dc..1d6f5d1649 100644 --- a/network/src/main/java/com/arcadedb/remote/RemoteServer.java +++ b/network/src/main/java/com/arcadedb/remote/RemoteServer.java @@ -74,7 +74,7 @@ public String toString() { return protocol + "://" + currentServer + ":" + currentPort; } - public void createUser(final String userName, final String password, final List databases) { + public void createUser(final String userName, final String password, final Map databases) { try { final HttpURLConnection connection = createConnection("POST", getUrl("server")); @@ -83,8 +83,8 @@ public void createUser(final String userName, final String password, final List< jsonUser.put("password", password); if (databases != null && !databases.isEmpty()) { final JSONObject databasesJson = new JSONObject(); - for (final String dbName : databases) - databasesJson.put(dbName, new String[] { "admin" }); + for (Map.Entry entry : databases.entrySet()) + databasesJson.put(entry.getKey(), new String[] { entry.getValue() }); jsonUser.put("databases", databasesJson); } @@ -101,6 +101,16 @@ public void createUser(final String userName, final String password, final List< } } + public void createUser(final String userName, final String password, final List databases) { + + Map databasesWithGroups = new HashMap(); + + for (final String dbName : databases) + databasesWithGroups.put(dbName, "admin"); + + createUser(userName, password, databasesWithGroups); + } + public void dropUser(final String userName) { try { final HttpURLConnection connection = createConnection("POST", getUrl("server"));