Skip to content

Commit 79ff3ff

Browse files
authored
hasRole return true if name equals, no matter func (casbin#274)
1 parent 5f78e43 commit 79ff3ff

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
p, employee, data1, read
2+
p, admin, data1, read
3+
p, admin, data1, write
4+
5+
g, ^E\d+$, employee
6+
g, root, admin

src/main/java/org/casbin/jcasbin/rbac/DomainRoles.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public boolean hasRole(final String name) {
3636

3737
public boolean hasRole(final String name, BiPredicate<String, String> matchingFunc) {
3838
if (matchingFunc != null) {
39-
return roles.keySet().stream().anyMatch(r -> matchingFunc.test(name, r));
39+
return roles.keySet().stream().anyMatch(r -> matchingFunc.test(name, r) || r.equals(name));
4040
} else {
4141
return roles.containsKey(name);
4242
}

src/test/java/org/casbin/jcasbin/main/RbacAPIUnitTest.java

+37
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414

1515
package org.casbin.jcasbin.main;
1616

17+
import org.casbin.jcasbin.persist.file_adapter.FileAdapter;
18+
import org.casbin.jcasbin.rbac.DefaultRoleManager;
19+
import org.casbin.jcasbin.util.BuiltInFunctions;
1720
import org.casbin.jcasbin.util.Util;
1821
import org.junit.Test;
1922

@@ -87,6 +90,40 @@ public void testRoleAPI() {
8790
testEnforce(e, "bob", "data2", "write", true);
8891
}
8992

93+
@Test
94+
public void testRoleAPIWithRegex() {
95+
Enforcer e = new Enforcer("examples/rbac_model.conf");
96+
e.setAdapter(new FileAdapter("examples/rbac_with_pattern_regex_policy.csv"));
97+
e.setRoleManager("g", new DefaultRoleManager(10, BuiltInFunctions::regexMatch, null));
98+
e.loadPolicy();
99+
100+
testGetRoles(e, "root", asList("admin"));
101+
testGetRoles(e, "^E\\d+$", asList("employee"));
102+
testGetRoles(e, "E101", asList("^E\\d+$"));
103+
assertEquals(e.getImplicitRolesForUser("E101"), asList("^E\\d+$", "employee"));
104+
105+
testEnforce(e, "E101", "data1", "read", true);
106+
testEnforce(e, "E101", "data1", "write", false);
107+
108+
e.addRoleForUser("^E\\d+$", "admin");
109+
110+
testGetRoles(e, "^E\\d+$", asList("employee","admin"));
111+
testGetRoles(e, "E101", asList("^E\\d+$"));
112+
assertEquals(e.getImplicitRolesForUser("E101"), asList("^E\\d+$", "employee", "admin"));
113+
114+
testEnforce(e, "E101", "data1", "read", true);
115+
testEnforce(e, "E101", "data1", "write", true);
116+
117+
e.deleteRoleForUser("^E\\d+$", "admin");
118+
119+
testGetRoles(e, "^E\\d+$", asList("employee"));
120+
testGetRoles(e, "E101", asList("^E\\d+$"));
121+
assertEquals(e.getImplicitRolesForUser("E101"), asList("^E\\d+$", "employee"));
122+
123+
testEnforce(e, "E101", "data1", "read", true);
124+
testEnforce(e, "E101", "data1", "write", false);
125+
}
126+
90127
@Test
91128
public void testGFunctionCache() {
92129
Enforcer e = new Enforcer("examples/rbac_model.conf", "examples/rbac_policy.csv");

0 commit comments

Comments
 (0)