Skip to content

Commit b3d64af

Browse files
committed
feat: add examples and add basic model-enforcer tests.
1 parent bd4e66c commit b3d64af

17 files changed

+752
-12
lines changed

casbin/effect/default_effector.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,25 @@ DefaultEffector* DefaultEffector :: NewDefaultEffector(){
3333
bool DefaultEffector :: MergeEffects(string expr, vector<Effect> effects, vector<float> results) {
3434
bool result;
3535

36-
unsigned int number_of_effects = sizeof(effects) / sizeof(effects[0]);
37-
3836
if (!expr.compare("some(where (p_eft == allow))")) {
3937
result = false;
40-
for(unsigned int index = 0 ; index < number_of_effects ; index++){
38+
for(unsigned int index = 0 ; index < effects.size() ; index++){
4139
if (effects[index] == Effect::Allow) {
4240
result = true;
4341
break;
4442
}
4543
}
4644
} else if (!expr.compare("!some(where (p_eft == deny))")) {
4745
result = true;
48-
for(unsigned int index = 0 ; index < number_of_effects ; index++){
46+
for(unsigned int index = 0 ; index < effects.size(); index++){
4947
if (effects[index] == Effect::Deny) {
5048
result = false;
5149
break;
5250
}
5351
}
5452
} else if (!expr.compare("some(where (p_eft == allow)) && !some(where (p_eft == deny))")) {
5553
result = false;
56-
for(unsigned int index = 0 ; index < number_of_effects ; index++){
54+
for(unsigned int index = 0 ; index < effects.size(); index++){
5755
if (effects[index] == Effect::Allow) {
5856
result = true;
5957
} else if (effects[index] == Effect::Deny) {
@@ -63,7 +61,7 @@ bool DefaultEffector :: MergeEffects(string expr, vector<Effect> effects, vector
6361
}
6462
} else if (!expr.compare("priority(p_eft) || deny")) {
6563
result = false;
66-
for(unsigned int index = 0 ; index < number_of_effects ; index++){
64+
for(unsigned int index = 0 ; index < effects.size(); index++){
6765
if (effects[index] != Effect::Indeterminate) {
6866
if (effects[index] == Effect::Allow) {
6967
result = true;

casbin/model/model.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,10 @@ bool Model :: AddDef(string sec, string key, string value) {
9191
ast->tokens = Split(ast->value, ",");
9292
for (int i = 0; i < ast->tokens.size() ; i++)
9393
ast->tokens[i] = key + "_" + Trim(ast->tokens[i]);
94-
} else if(sec == "e")
95-
ast->value = RemoveComments(EscapeAssertion(ast->value));
96-
else
94+
} else if(sec == "m")
9795
ast->value = RemoveComments(ast->value);
96+
else
97+
ast->value = RemoveComments(EscapeAssertion(ast->value));
9898

9999
if (m.find(sec) != m.end())
100100
m[sec] = AssertionMap();

casbin/persist/file_adapter/file_adapter.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ FileAdapter* FileAdapter :: NewAdapter(string file_path) {
2020

2121
// LoadPolicy loads all policy rules from the storage.
2222
void FileAdapter :: LoadPolicy(Model* model) {
23-
if (this->file_path == "") {
23+
if (this->file_path == "")
2424
throw CasbinAdapterException("Invalid file path, file path cannot be empty");
25-
}
2625

2726
this->LoadPolicyFile(model, LoadPolicyLine);
2827
}

examples/abac_rule_model.conf

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[request_definition]
2+
r = sub, obj, act
3+
4+
[policy_definition]
5+
p = sub_rule, obj, act
6+
7+
[policy_effect]
8+
e = some(where (p.eft == allow))
9+
10+
[matchers]
11+
m = eval(p.sub_rule) && r.obj == p.obj && r.act == p.act

examples/abac_rule_policy.csv

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
p, r.sub.Age > 18, /data1, read
2+
p, r.sub.Age < 60, /data2, write
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[request_definition]
2+
r = sub,obj,act
3+
4+
[policy_definition]
5+
p = sub,obj,act
6+
7+
[policy_effect]
8+
e = some(where (p.eft == allow))
9+
10+
[matchers]
11+
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

examples/comment_model.conf

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[request_definition]
2+
r = sub, obj, act ; Request definition
3+
4+
[policy_definition]
5+
p = sub, obj, act
6+
7+
[policy_effect]
8+
e = some(where (p.eft == allow)) # This is policy effect.
9+
10+
# Matchers
11+
[matchers]
12+
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

examples/glob_model.conf

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[request_definition]
2+
r = sub, obj, act
3+
4+
[policy_definition]
5+
p = sub, obj, act
6+
7+
[policy_effect]
8+
e = some(where (p.eft == allow))
9+
10+
[matchers]
11+
m = r.sub == p.sub && globMatch(r.obj, p.obj) && r.act == p.act

examples/glob_policy.csv

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
p, u1, /foo/*, read
2+
p, u2, /foo*, read
3+
p, u3, /*/foo/*, read
4+
p, u4, *, read
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[request_definition]
2+
r = sub, dom, obj, act
3+
4+
[policy_definition]
5+
p = sub, dom, obj, act
6+
7+
[role_definition]
8+
g = _, _, _
9+
10+
[policy_effect]
11+
e = some(where (p.eft == allow))
12+
13+
[matchers]
14+
m = r.sub == p.sub && g(r.obj, p.obj, r.dom) && r.dom == p.dom && r.act == p.act
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
p, alice, domain1, book_group, read
2+
p, alice, domain2, book_group, write
3+
4+
g, /book/:id, book_group, *
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[request_definition]
2+
r = sub, dom, obj, act
3+
4+
[policy_definition]
5+
p = sub, dom, obj, act
6+
7+
[role_definition]
8+
g = _, _, _
9+
10+
[policy_effect]
11+
e = some(where (p.eft == allow))
12+
13+
[matchers]
14+
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
p, admin, domain1, data1, read
2+
p, admin, domain1, data1, write
3+
p, admin, domain2, data2, read
4+
p, admin, domain2, data2, write
5+
6+
g, alice, admin, *
7+
g, bob, admin, domain2

examples/rbac_with_pattern_policy.csv

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ p, pen_admin, pen_group, GET
66
g, alice, book_admin
77
g, bob, pen_admin
88

9-
g, /book/*, book_group
109
g, cathy, /book/1/2/3/4/5
1110
g, cathy, pen_admin
1211

12+
g2, /book/*, book_group
13+
1314
g2, /book/:id, book_group
1415
g2, /pen/:id, pen_group
1516

test/test.vcxproj

+1
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@
168168
<ClCompile Include="test_built_in_functions.cpp" />
169169
<ClCompile Include="test_config.cpp" />
170170
<ClCompile Include="test_model.cpp" />
171+
<ClCompile Include="test_model_enforcer.cpp" />
171172
<ClCompile Include="test_role_manager.cpp" />
172173
<ClCompile Include="test_util.cpp" />
173174
</ItemGroup>

test/test.vcxproj.filters

+3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
<ClCompile Include="test_role_manager.cpp">
3434
<Filter>Source Files</Filter>
3535
</ClCompile>
36+
<ClCompile Include="test_model_enforcer.cpp">
37+
<Filter>Source Files</Filter>
38+
</ClCompile>
3639
</ItemGroup>
3740
<ItemGroup>
3841
<ClInclude Include="pch.h">

0 commit comments

Comments
 (0)