Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit 6033962

Browse files
committed
#159 Added support for all permission capabilities
1 parent 2028cd1 commit 6033962

File tree

2 files changed

+41
-34
lines changed

2 files changed

+41
-34
lines changed

src/main/java/com/marklogic/client/ext/util/DefaultDocumentPermissionsParser.java

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,32 @@
22

33
import com.marklogic.client.io.DocumentMetadataHandle.Capability;
44
import com.marklogic.client.io.DocumentMetadataHandle.DocumentPermissions;
5-
import com.marklogic.client.ext.util.DocumentPermissionsParser;
65

76
public class DefaultDocumentPermissionsParser implements DocumentPermissionsParser {
87

9-
@Override
10-
public void parsePermissions(String str, DocumentPermissions permissions) {
11-
if (str != null && str.trim().length() > 0) {
12-
String[] tokens = str.split(",");
13-
for (int i = 0; i < tokens.length; i += 2) {
14-
String role = tokens[i];
15-
if (i + 1 >= tokens.length) {
16-
throw new IllegalArgumentException("Unable to parse permissions string, which must be a comma-separated " +
17-
"list of role names and capabilities - i.e. role1,read,role2,update,role3,execute; string: " + str);
18-
}
19-
String capability = tokens[i + 1];
20-
Capability c = null;
21-
if (capability.equals("execute")) {
22-
c = Capability.EXECUTE;
23-
} else if (capability.equals("insert")) {
24-
c = Capability.INSERT;
25-
} else if (capability.equals("update")) {
26-
c = Capability.UPDATE;
27-
} else if (capability.equals("read")) {
28-
c = Capability.READ;
29-
}
30-
if (permissions.containsKey(role)) {
31-
permissions.get(role).add(c);
32-
} else {
33-
permissions.add(role, c);
34-
}
35-
}
36-
}
37-
}
8+
@Override
9+
public void parsePermissions(String str, DocumentPermissions permissions) {
10+
if (str != null && str.trim().length() > 0) {
11+
String[] tokens = str.split(",");
12+
for (int i = 0; i < tokens.length; i += 2) {
13+
String role = tokens[i];
14+
if (i + 1 >= tokens.length) {
15+
throw new IllegalArgumentException("Unable to parse permissions string, which must be a comma-separated " +
16+
"list of role names and capabilities - i.e. role1,read,role2,update,role3,execute; string: " + str);
17+
}
18+
Capability c;
19+
try {
20+
c = Capability.getValueOf(tokens[i + 1]);
21+
} catch (Exception e) {
22+
throw new IllegalArgumentException("Unable to parse permissions string: " + str + "; cause: " + e.getMessage());
23+
}
24+
if (permissions.containsKey(role)) {
25+
permissions.get(role).add(c);
26+
} else {
27+
permissions.add(role, c);
28+
}
29+
}
30+
}
31+
}
3832

3933
}

src/test/java/com/marklogic/client/ext/util/ParseDocumentPermissionsTest.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,22 @@ public class ParseDocumentPermissionsTest {
1010
private DefaultDocumentPermissionsParser parser = new DefaultDocumentPermissionsParser();
1111

1212
@Test
13-
public void test() {
14-
String str = "rest-admin,read,rest-admin,update,rest-extension-user,execute";
13+
void test() {
14+
String str = "rest-admin,read,rest-admin,update,rest-extension-user,execute,app-user,node-update";
1515
DocumentMetadataHandle metadata = new DocumentMetadataHandle();
1616
parser.parsePermissions(str, metadata.getPermissions());
1717

1818
DocumentMetadataHandle.DocumentPermissions perms = metadata.getPermissions();
19-
assertEquals(2, perms.size());
19+
assertEquals(3, perms.size());
2020
assertEquals(2, perms.get("rest-admin").size());
2121
assertEquals(1, perms.get("rest-extension-user").size());
22+
assertEquals(DocumentMetadataHandle.Capability.EXECUTE, perms.get("rest-extension-user").iterator().next());
23+
assertEquals(1, perms.get("app-user").size());
24+
assertEquals(DocumentMetadataHandle.Capability.NODE_UPDATE, perms.get("app-user").iterator().next());
2225
}
2326

2427
@Test
25-
public void badInput() {
28+
void badInput() {
2629
String str = "rest-admin,read,rest-admin";
2730
try {
2831
parser.parsePermissions(str, new DocumentMetadataHandle().getPermissions());
@@ -32,4 +35,14 @@ public void badInput() {
3235
assertTrue(ex.getMessage().startsWith("Unable to parse permissions string"));
3336
}
3437
}
38+
39+
@Test
40+
void invalidCapability() {
41+
String str = "app-user,not-valid";
42+
IllegalArgumentException ex = assertThrows(
43+
IllegalArgumentException.class,
44+
() -> parser.parsePermissions(str, new DocumentMetadataHandle().getPermissions()));
45+
assertEquals("Unable to parse permissions string: app-user,not-valid; cause: No enum constant com.marklogic.client.io.DocumentMetadataHandle.Capability.NOT_VALID",
46+
ex.getMessage());
47+
}
3548
}

0 commit comments

Comments
 (0)