Skip to content

Commit 5070296

Browse files
committed
feat: Add RBAC API with Domains tests.
Signed-off-by: DivyPatel9881 <[email protected]>
1 parent 21b31ad commit 5070296

File tree

9 files changed

+189
-19
lines changed

9 files changed

+189
-19
lines changed

test/test.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@
172172
<ClCompile Include="test_model.cpp" />
173173
<ClCompile Include="test_model_enforcer.cpp" />
174174
<ClCompile Include="test_rbac_api.cpp" />
175+
<ClCompile Include="test_rbac_api_with_domains.cpp" />
175176
<ClCompile Include="test_role_manager.cpp" />
176177
<ClCompile Include="test_util.cpp" />
177178
</ItemGroup>

test/test.vcxproj.filters

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
<ClCompile Include="test_rbac_api.cpp">
4646
<Filter>Source Files</Filter>
4747
</ClCompile>
48+
<ClCompile Include="test_rbac_api_with_domains.cpp">
49+
<Filter>Source Files</Filter>
50+
</ClCompile>
4851
</ItemGroup>
4952
<ItemGroup>
5053
<ClInclude Include="pch.h">

test/test_config.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
#include "pch.h"
44

5-
#include <direct.h>
6-
#include <algorithm>
7-
85
#include <config.h>
96
#include <util.h>
107

test/test_enforcer.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
#include "pch.h"
44

5-
#include <direct.h>
6-
#include <algorithm>
7-
85
#include <enforcer.h>
96
#include <persist.h>
107
#include <rbac.h>

test/test_management_api.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22

33
#include "pch.h"
44

5-
#include <direct.h>
6-
#include <algorithm>
7-
#include <fstream>
8-
95
#include <enforcer.h>
106
#include <persist.h>
117
#include <config.h>

test/test_model.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
#include "pch.h"
44

5-
#include <direct.h>
6-
#include <algorithm>
75
#include <fstream>
86

97
#include <util.h>

test/test_model_enforcer.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
#include "pch.h"
44

5-
#include <direct.h>
6-
#include <algorithm>
7-
85
#include <enforcer.h>
96
#include <persist.h>
107
#include <rbac.h>

test/test_rbac_api.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22

33
#include "pch.h"
44

5-
#include <direct.h>
6-
#include <algorithm>
7-
#include <fstream>
8-
95
#include <enforcer.h>
106
#include <rbac.h>
117
#include <util.h>
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
#pragma once
2+
3+
#include "pch.h"
4+
5+
#include <enforcer.h>
6+
#include <exception.h>
7+
#include <rbac.h>
8+
#include <util.h>
9+
10+
using namespace std;
11+
12+
namespace test_rbac_api_with_domains
13+
{
14+
TEST_CLASS(TestRBACAPIWithDomains)
15+
{
16+
public:
17+
18+
TEST_METHOD(TestGetImplicitRolesForDomainUser) {
19+
Enforcer* e = Enforcer::NewEnforcer("../../examples/rbac_with_domains_model.conf", "../../examples/rbac_with_hierarchy_with_domains_policy.csv");
20+
21+
// This is only able to retrieve the first level of roles.
22+
Assert::IsTrue(ArrayEquals({ "role:global_admin" }, e->GetRolesForUserInDomain("alice", { "domain1" })));
23+
24+
// Retrieve all inherit roles. It supports domains as well.
25+
Assert::IsTrue(ArrayEquals(vector<string>{"role:global_admin", "role:reader", "role:writer"}, e->GetImplicitRolesForUser("alice", {"domain1"})));
26+
}
27+
28+
// TestUserAPIWithDomains: Add by Gordon
29+
TEST_METHOD(TestUserAPIWithDomains) {
30+
Enforcer* e = Enforcer::NewEnforcer("../../examples/rbac_with_domains_model.conf", "../../examples/rbac_with_domains_policy.csv");
31+
32+
Assert::IsTrue(ArrayEquals({ "alice" }, e->GetUsersForRole("admin", { "domain1" })));
33+
Assert::IsTrue(ArrayEquals({ "alice" }, e->GetUsersForRoleInDomain("admin", { "domain1" })));
34+
35+
try {
36+
e->GetUsersForRole("non_exist", { "domain1" });
37+
}
38+
catch (CasbinRBACException e) {
39+
Assert::IsTrue(true);
40+
}
41+
try {
42+
e->GetUsersForRoleInDomain("non_exist", { "domain1" });
43+
}
44+
catch (CasbinRBACException e) {
45+
Assert::IsTrue(true);
46+
}
47+
48+
Assert::IsTrue(ArrayEquals({ "bob" }, e->GetUsersForRole("admin", { "domain2" })));
49+
Assert::IsTrue(ArrayEquals({ "bob" }, e->GetUsersForRoleInDomain("admin", { "domain2" })));
50+
51+
try {
52+
e->GetUsersForRole("non_exist", { "domain2" });
53+
}
54+
catch (CasbinRBACException e) {
55+
Assert::IsTrue(true);
56+
}
57+
try {
58+
e->GetUsersForRoleInDomain("non_exist", { "domain2" });
59+
}
60+
catch (CasbinRBACException e) {
61+
Assert::IsTrue(true);
62+
}
63+
64+
e->DeleteRoleForUserInDomain("alice", "admin", "domain1");
65+
e->AddRoleForUserInDomain("bob", "admin", "domain1");
66+
67+
Assert::IsTrue(ArrayEquals({ "bob" }, e->GetUsersForRole("admin", { "domain1" })));
68+
Assert::IsTrue(ArrayEquals({ "bob" }, e->GetUsersForRoleInDomain("admin", { "domain1" })));
69+
70+
try {
71+
e->GetUsersForRole("non_exist", { "domain1" });
72+
}
73+
catch (CasbinRBACException e) {
74+
Assert::IsTrue(true);
75+
}
76+
try {
77+
e->GetUsersForRoleInDomain("non_exist", { "domain1" });
78+
}
79+
catch (CasbinRBACException e) {
80+
Assert::IsTrue(true);
81+
}
82+
83+
Assert::IsTrue(ArrayEquals({ "bob" }, e->GetUsersForRole("admin", { "domain2" })));
84+
Assert::IsTrue(ArrayEquals({ "bob" }, e->GetUsersForRoleInDomain("admin", { "domain2" })));
85+
86+
try {
87+
e->GetUsersForRole("non_exist", { "domain2" });
88+
}
89+
catch (CasbinRBACException e) {
90+
Assert::IsTrue(true);
91+
}
92+
try {
93+
e->GetUsersForRoleInDomain("non_exist", { "domain2" });
94+
}
95+
catch (CasbinRBACException e) {
96+
Assert::IsTrue(true);
97+
}
98+
}
99+
100+
TEST_METHOD(TestRoleAPIWithDomains) {
101+
Enforcer* e = Enforcer::NewEnforcer("../../examples/rbac_with_domains_model.conf", "../../examples/rbac_with_domains_policy.csv");
102+
103+
Assert::IsTrue(ArrayEquals({ "admin" }, e->GetRolesForUser("alice", { "domain1" })));
104+
Assert::IsTrue(ArrayEquals({ "admin" }, e->GetRolesForUserInDomain("alice", { "domain1" })));
105+
106+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("bob", { "domain1" })));
107+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("bob", { "domain1" })));
108+
109+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("admin", { "domain1" })));
110+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("admin", { "domain1" })));
111+
112+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("non_exist", { "domain1" })));
113+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("non_exist", { "domain1" })));
114+
115+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("alice", { "domain2" })));
116+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("alice", { "domain2" })));
117+
118+
Assert::IsTrue(ArrayEquals({ "admin" }, e->GetRolesForUser("bob", { "domain2" })));
119+
Assert::IsTrue(ArrayEquals({ "admin" }, e->GetRolesForUserInDomain("bob", { "domain2" })));
120+
121+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("admin", { "domain2" })));
122+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("admin", { "domain2" })));
123+
124+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("non_exist", { "domain2" })));
125+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("non_exist", { "domain2" })));
126+
127+
e->DeleteRoleForUserInDomain("alice", "admin", "domain1");
128+
e->AddRoleForUserInDomain("bob", "admin", "domain1");
129+
130+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("alice", { "domain1" })));
131+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("alice", { "domain1" })));
132+
133+
Assert::IsTrue(ArrayEquals({ "admin" }, e->GetRolesForUser("bob", { "domain1" })));
134+
Assert::IsTrue(ArrayEquals({ "admin" }, e->GetRolesForUserInDomain("bob", { "domain1" })));
135+
136+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("admin", { "domain1" })));
137+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("admin", { "domain1" })));
138+
139+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("non_exist", { "domain1" })));
140+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("non_exist", { "domain1" })));
141+
142+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("alice", { "domain2" })));
143+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("alice", { "domain2" })));
144+
145+
Assert::IsTrue(ArrayEquals({ "admin" }, e->GetRolesForUser("bob", { "domain2" })));
146+
Assert::IsTrue(ArrayEquals({ "admin" }, e->GetRolesForUserInDomain("bob", { "domain2" })));
147+
148+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("admin", { "domain2" })));
149+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("admin", { "domain2" })));
150+
151+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUser("non_exist", { "domain2" })));
152+
Assert::IsTrue(ArrayEquals({ }, e->GetRolesForUserInDomain("non_exist", { "domain2" })));
153+
}
154+
155+
void TestGetPermissionsInDomain(Enforcer* e, string name, string domain, vector<vector<string>> res) {
156+
vector<vector<string>> my_res = e->GetPermissionsForUserInDomain(name, { domain });
157+
158+
int count = 0;
159+
for (int i = 0; i < my_res.size(); i++) {
160+
for (int j = 0; j < res.size(); j++) {
161+
if (ArrayEquals(res[j], my_res[i])) {
162+
count += 1;
163+
break;
164+
}
165+
}
166+
}
167+
168+
Assert::AreEqual(int(res.size()), count);
169+
}
170+
171+
TEST_METHOD(TestPermissionAPIInDomain) {
172+
Enforcer* e = Enforcer::NewEnforcer("../../examples/rbac_with_domains_model.conf", "../../examples/rbac_with_domains_policy.csv");
173+
174+
TestGetPermissionsInDomain(e, "alice", "domain1", {});
175+
TestGetPermissionsInDomain(e, "bob", "domain1", {});
176+
TestGetPermissionsInDomain(e, "admin", "domain1", { {"admin", "domain1", "data1", "read"}, {"admin", "domain1", "data1", "write"} });
177+
TestGetPermissionsInDomain(e, "non_exist", "domain1", {});
178+
179+
TestGetPermissionsInDomain(e, "alice", "domain2", {});
180+
TestGetPermissionsInDomain(e, "bob", "domain2", {});
181+
TestGetPermissionsInDomain(e, "admin", "domain2", { {"admin", "domain2", "data2", "read"}, {"admin", "domain2", "data2", "write"} });
182+
TestGetPermissionsInDomain(e, "non_exist", "domain2", {});
183+
}
184+
};
185+
}

0 commit comments

Comments
 (0)