Skip to content

Commit 4ff45f8

Browse files
committed
fix: change iteration logic for vectors and remove unwanted formating.
1 parent d90e72d commit 4ff45f8

File tree

3 files changed

+70
-84
lines changed

3 files changed

+70
-84
lines changed

casbin/model/assertion.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ void Assertion :: BuildIncrementalRoleLinks(RoleManager* rm, policy_op op, vecto
1414
if (char_count < 2)
1515
throw IllegalArgumentException("the number of \"_\" in role definition should be at least 2");
1616

17-
for (vector<vector<string>> :: iterator it = this->policy.begin() ; it != this->policy.end() ; it++) {
18-
vector<string> rule = *it;
17+
for(int i = 0 ; i < this->policy.size() ; i++){
18+
vector<string> rule = this->policy[i];
1919

2020
if (rule.size() < char_count)
2121
throw IllegalArgumentException("grouping policy elements do not meet role definition");
@@ -40,8 +40,8 @@ void Assertion :: BuildRoleLinks(RoleManager* rm) {
4040
if (char_count < 2)
4141
throw IllegalArgumentException("the number of \"_\" in role definition should be at least 2");
4242

43-
for (vector<vector<string>> :: iterator it = this->policy.begin() ; it != this->policy.end() ; it++) {
44-
vector<string> rule = *it;
43+
for(int i = 0 ; i < this->policy.size() ; i++){
44+
vector<string> rule = policy[i];
4545

4646
if (rule.size() < char_count)
4747
throw IllegalArgumentException("grouping policy elements do not meet role definition");

casbin/model/model.cpp

Lines changed: 40 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ vector<string> Model :: required_sections{"r","p","e","m"};
2424
void Model :: LoadModelFromConfig(ConfigInterface *cfg) {
2525
for(unordered_map <string, string> :: iterator it = section_name_map.begin() ; it != section_name_map.end() ; it++)
2626
LoadSection(this, cfg, it->first);
27+
2728
vector<string> ms;
28-
for(vector<string> :: iterator it = required_sections.begin() ; it != required_sections.end() ; it++){
29-
if(!this->HasSection(*it))
30-
ms.push_back(section_name_map[*it]);
31-
}
29+
for(int i=0 ; i < required_sections.size() ; i++)
30+
if(!this->HasSection(required_sections[i]))
31+
ms.push_back(section_name_map[required_sections[i]]);
32+
3233
if(ms.size() > 0)
3334
throw MissingRequiredSections("missing required sections: " + Join(ms, ","));
3435
}
@@ -66,20 +67,22 @@ bool Model :: LoadAssertion(Model* model, ConfigInterface* cfg, string sec, stri
6667
bool Model :: AddDef(string sec, string key, string value) {
6768
if(value == "")
6869
return false;
69-
Assertion ast;
70-
ast.key = key;
71-
ast.value = value;
70+
71+
Assertion* ast = new Assertion;
72+
ast->key = key;
73+
ast->value = value;
7274
if (sec == "r" || sec == "p") {
73-
ast.tokens = Split(ast.value, ",");
74-
for (int i = 0; i < ast.tokens.size() ; i++)
75-
ast.tokens[i] = key + "_" + Trim(ast.tokens[i]);
75+
ast->tokens = Split(ast->value, ",");
76+
for (int i = 0; i < ast->tokens.size() ; i++)
77+
ast->tokens[i] = key + "_" + Trim(ast->tokens[i]);
7678
}
7779
else
78-
ast.value = RemoveComments(EscapeAssertion(ast.value));
80+
ast->value = RemoveComments(EscapeAssertion(ast->value));
7981

8082
if (m.find(sec) != m.end())
8183
m[sec] = AssertionMap();
82-
m[sec].assertion_map[key] = &ast;
84+
ast->policy = vector<vector<string>>{};
85+
m[sec].assertion_map[key] = ast;
8386

8487
return true;
8588
}
@@ -167,13 +170,13 @@ void Model :: PrintPolicy() {
167170

168171
// ClearPolicy clears all current policy.
169172
void Model :: ClearPolicy() {
170-
for (unordered_map<string, Assertion*> :: iterator it = this->m["p"].assertion_map.begin() ; it != this->m["p"].assertion_map.end() ; it++) {
171-
(it->second)->policy.clear();
172-
}
173+
for (unordered_map<string, Assertion*> :: iterator it = this->m["p"].assertion_map.begin() ; it != this->m["p"].assertion_map.end() ; it++)
174+
if((it->second)->policy.size() > 0)
175+
(it->second)->policy.clear();
173176

174-
for (unordered_map<string, Assertion*> :: iterator it = this->m["g"].assertion_map.begin() ; it != this->m["g"].assertion_map.end() ; it++) {
175-
(it->second)->policy.clear();
176-
}
177+
for (unordered_map<string, Assertion*> :: iterator it = this->m["g"].assertion_map.begin() ; it != this->m["g"].assertion_map.end() ; it++)
178+
if((it->second)->policy.size() > 0)
179+
(it->second)->policy.clear();
177180
}
178181

179182
// GetPolicy gets all rules in a policy.
@@ -184,30 +187,28 @@ vector<vector<string>> Model :: GetPolicy(string sec, string p_type) {
184187
// GetFilteredPolicy gets rules based on field filters from a policy.
185188
vector<vector<string>> Model :: GetFilteredPolicy(string sec, string p_type, int field_index, vector<string> field_values) {
186189
vector<vector<string>> res;
187-
188-
for (vector<vector<string>> :: iterator it = m[sec].assertion_map[p_type]->policy.begin() ; it != m[sec].assertion_map[p_type]->policy.end() ; it++){
190+
vector<vector<string>> policy(m[sec].assertion_map[p_type]->policy);
191+
for(int i = 0 ; i < policy.size() ; i++){
189192
bool matched = true;
190193
for(int i = 0 ; i < field_values.size() ; i++){
191-
if(field_values[i] != "" && (*it)[field_index + i] != field_values[i] ){
194+
if(field_values[i] != "" && (policy[i])[field_index + i] != field_values[i] ){
192195
matched = false;
193196
break;
194197
}
195198
}
196-
if(matched) {
197-
res.push_back(*it);
198-
}
199+
if(matched)
200+
res.push_back(policy[i]);
199201
}
200202

201203
return res;
202204
}
203205

204206
// HasPolicy determines whether a model has the specified policy rule.
205207
bool Model :: HasPolicy(string sec, string p_type, vector<string> rule) {
206-
for (vector<vector<string>> :: iterator it = m[sec].assertion_map[p_type]->policy.begin() ; it != m[sec].assertion_map[p_type]->policy.end() ; it++) {
207-
if (ArrayEquals(rule, *it)) {
208+
vector<vector<string>> policy(m[sec].assertion_map[p_type]->policy);
209+
for(int i=0 ; i < policy.size() ; i++)
210+
if (ArrayEquals(rule, policy[i]))
208211
return true;
209-
}
210-
}
211212

212213
return false;
213214
}
@@ -267,21 +268,22 @@ bool Model :: RemovePolicies(string sec, string p_type, vector<vector<string>> r
267268
pair<bool, vector<vector<string>>> Model :: RemoveFilteredPolicy(string sec, string p_type, int field_index, vector<string> field_values) {
268269
vector<vector<string>> tmp;
269270
vector<vector<string>> effects;
271+
vector<vector<string>> policy(m[sec].assertion_map[p_type]->policy);
270272
bool res = false;
271-
for (vector<vector< string>> :: iterator it = m[sec].assertion_map[p_type]->policy.begin() ; it != m[sec].assertion_map[p_type]->policy.end() ; it++) {
273+
for(int i = 0 ; i < policy.size() ; i++){
272274
bool matched = true;
273275
for (int i = 0 ; i < field_values.size() ; i++) {
274-
if (field_values[i] != "" && (*it)[field_index+i] != field_values[i]) {
276+
if (field_values[i] != "" && (policy[i])[field_index+i] != field_values[i]) {
275277
matched = false;
276278
break;
277279
}
278280
}
279281
if (matched){
280-
effects.push_back(*it);
282+
effects.push_back(policy[i]);
281283
res = true;
282284
}
283285
else
284-
tmp.push_back(*it);
286+
tmp.push_back(policy[i]);
285287
}
286288

287289
m[sec].assertion_map[p_type]->policy = tmp;
@@ -292,10 +294,9 @@ pair<bool, vector<vector<string>>> Model :: RemoveFilteredPolicy(string sec, str
292294
// GetValuesForFieldInPolicy gets all values for a field for all rules in a policy, duplicated values are removed.
293295
vector<string> Model :: GetValuesForFieldInPolicy(string sec, string p_type, int field_index) {
294296
vector<string> values;
295-
296-
for (vector<vector<string>> :: iterator it = m[sec].assertion_map[p_type]->policy.begin() ; it != m[sec].assertion_map[p_type]->policy.end() ; it++){
297-
values.push_back((*it)[field_index]);
298-
}
297+
vector<vector<string>> policy(m[sec].assertion_map[p_type]->policy);
298+
for(int i = 0 ; i < policy.size() ; i++)
299+
values.push_back((policy[i])[field_index]);
299300

300301
ArrayRemoveDuplicates(values);
301302

@@ -307,9 +308,9 @@ vector<string> Model :: GetValuesForFieldInPolicyAllTypes(string sec, int field_
307308
vector<string> values;
308309

309310
for (unordered_map<string, Assertion*> :: iterator it = m[sec].assertion_map.begin() ; it != m[sec].assertion_map.end() ; it++) {
310-
for (vector<string> :: iterator it1 = this->GetValuesForFieldInPolicy(sec, it->first, field_index).begin() ; it1 != this->GetValuesForFieldInPolicy(sec, it->first, field_index).end() ; it1++) {
311-
values.push_back(*it1);
312-
}
311+
vector<string> values_for_field(this->GetValuesForFieldInPolicy(sec, it->first, field_index));
312+
for(int i = 0 ; i < values_for_field.size() ; i++)
313+
values.push_back(values_for_field[i]);
313314
}
314315

315316
ArrayRemoveDuplicates(values);

casbin/rbac/default_role_manager.cpp

Lines changed: 26 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -29,28 +29,23 @@ void Role :: DeleteRole(Role* role) {
2929
}
3030

3131
bool Role :: HasRole(string name, int hierarchy_level) {
32-
if (!this->name.compare(name)) {
32+
if (!this->name.compare(name))
3333
return true;
34-
}
3534

36-
if (hierarchy_level <= 0) {
35+
if (hierarchy_level <= 0)
3736
return false;
38-
}
3937

40-
for (vector<Role*> :: iterator it = roles.begin() ; it != roles.end() ; it++) {
41-
if ((*it)->HasRole(name, hierarchy_level - 1)) {
38+
for(int i = 0 ; i < roles.size() ; i++)
39+
if (roles[i]->HasRole(name, hierarchy_level - 1))
4240
return true;
43-
}
44-
}
41+
4542
return false;
4643
}
4744

4845
bool Role :: HasDirectRole(string name) {
49-
for (vector<Role*> :: iterator it = roles.begin() ; it != roles.end() ; it++) {
50-
if (!(*it)->name.compare(name)) {
46+
for(int i = 0 ; i < roles.size() ; i++)
47+
if (!roles[i]->name.compare(name))
5148
return true;
52-
}
53-
}
5449

5550
return false;
5651
}
@@ -70,22 +65,20 @@ string Role :: ToString() {
7065

7166
vector<string> Role :: GetRoles() {
7267
vector<string> names;
73-
for (vector<Role*> :: iterator it = roles.begin() ; it != roles.end() ; it++) {
74-
names.push_back((*it)->name);
75-
}
68+
for(int i = 0 ; i < roles.size() ; i++)
69+
names.push_back(roles[i]->name);
70+
7671
return names;
7772
}
7873

7974
bool DefaultRoleManager :: HasRole(string name) {
8075
bool ok = false;
81-
if (this->has_pattern) {
82-
for (unordered_map<string, Role*> :: iterator it = this->all_roles.begin() ; it != this->all_roles.end() ; it++) {
76+
if (this->has_pattern)
77+
for (unordered_map<string, Role*> :: iterator it = this->all_roles.begin() ; it != this->all_roles.end() ; it++)
8378
if (this->matching_func(name, it->first))
8479
ok = true;
85-
}
86-
} else {
80+
else
8781
ok = this->all_roles.find(name) != this->all_roles.end();
88-
}
8982

9083
return ok;
9184
}
@@ -172,13 +165,11 @@ void DefaultRoleManager :: DeleteLink(string name1, string name2, vector<string>
172165
if (domain_length == 1) {
173166
name1 = domain[0] + "::" + name1;
174167
name2 = domain[0] + "::" + name2;
175-
} else if (domain_length > 1) {
168+
} else if (domain_length > 1)
176169
throw CasbinRBACException("error: domain should be 1 parameter");
177-
}
178170

179-
if (!HasRole(name1) || !HasRole(name2)) {
171+
if (!HasRole(name1) || !HasRole(name2))
180172
throw CasbinRBACException("error: name1 or name2 does not exist");
181-
}
182173

183174
Role* role1 = this->CreateRole(name1);
184175
Role* role2 = this->CreateRole(name2);
@@ -194,17 +185,14 @@ bool DefaultRoleManager :: HasLink(string name1, string name2, vector<string> do
194185
if (domain_length == 1) {
195186
name1 = domain[0] + "::" + name1;
196187
name2 = domain[0] + "::" + name2;
197-
} else if (domain_length > 1) {
188+
} else if (domain_length > 1)
198189
throw CasbinRBACException("error: domain should be 1 parameter");
199-
}
200190

201-
if (!name1.compare(name2)) {
191+
if (!name1.compare(name2))
202192
return true;
203-
}
204193

205-
if (!HasRole(name1) || !HasRole(name2)) {
194+
if (!HasRole(name1) || !HasRole(name2))
206195
return false;
207-
}
208196

209197
Role* role1 = this->CreateRole(name1);
210198
return role1->HasRole(name2, max_hierarchy_level);
@@ -216,23 +204,21 @@ bool DefaultRoleManager :: HasLink(string name1, string name2, vector<string> do
216204
*/
217205
vector<string> DefaultRoleManager :: GetRoles(string name, vector<string> domain) {
218206
unsigned int domain_length = int(domain.size());
219-
if (domain_length == 1) {
207+
if (domain_length == 1)
220208
name = domain[0] + "::" + name;
221-
} else if (domain_length > 1) {
209+
else if (domain_length > 1)
222210
throw CasbinRBACException("error: domain should be 1 parameter");
223-
}
224211

225212
if (!HasRole(name)) {
226213
vector<string> roles;
227214
return roles;
228215
}
229216

230217
vector<string> roles = this->CreateRole(name)->GetRoles();
231-
if (domain_length == 1) {
232-
for (int i = 0; i < roles.size(); i ++) {
218+
if (domain_length == 1)
219+
for (int i = 0; i < roles.size(); i ++)
233220
roles[i] = roles[i].substr(domain[0].length() + 2, roles[i].length() - domain[0].length() - 2);
234-
}
235-
}
221+
236222
return roles;
237223
}
238224

@@ -252,10 +238,10 @@ vector<string> DefaultRoleManager :: GetUsers(string name, vector<string> domain
252238
names.push_back(role->name);
253239
}
254240

255-
if (domain.size() == 1) {
241+
if (domain.size() == 1)
256242
for (int i = 0 ; i < names.size() ; i++)
257243
names[i] = names[i].substr(domain[0].length() + 2, names[i].length() - domain[0].length() - 2);
258-
}
244+
259245
return names;
260246
}
261247

@@ -272,8 +258,7 @@ void DefaultRoleManager :: PrintRoles() {
272258
string text = this->all_roles.begin()->second->ToString();
273259
unordered_map<string, Role*> :: iterator it = this->all_roles.begin();
274260
it++;
275-
for ( ; it != this->all_roles.end() ; it++) {
261+
for ( ; it != this->all_roles.end() ; it++)
276262
text += ", " + it->second->ToString();
277-
}
278263
// LogUtil::LogPrint(text);
279264
}

0 commit comments

Comments
 (0)