Skip to content

Commit 51b8833

Browse files
authored
fix: wrong domain length judge and bug in build_incremental_role_links() (#139)
Signed-off-by: Jon Lee <techlee@qq.com>
1 parent 8463506 commit 51b8833

File tree

2 files changed

+18
-21
lines changed

2 files changed

+18
-21
lines changed

casbin/model/assertion.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22
from casbin.model.policy_op import PolicyOp
33

4+
45
class Assertion:
56
def __init__(self):
67
self.logger = logging.getLogger()
@@ -19,6 +20,8 @@ def build_role_links(self, rm):
1920
for rule in self.policy:
2021
if len(rule) < count:
2122
raise RuntimeError("grouping policy elements do not meet role definition")
23+
if len(rule) > count:
24+
rule = rule[:count]
2225

2326
self.rm.add_link(*rule[:count])
2427

@@ -27,21 +30,17 @@ def build_role_links(self, rm):
2730

2831
def build_incremental_role_links(self, rm, op, rules):
2932
self.rm = rm
30-
count = 0
31-
for i in range(len(self.value)):
32-
if self.value[i] == "_":
33-
count += 1
34-
33+
count = self.value.count("_")
34+
if count < 2:
35+
raise RuntimeError('the number of "_" in role definition should be at least 2')
3536
for rule in rules:
36-
if count < 2:
37-
raise TypeError("the number of \"_\" in role definition should be at least 2")
3837
if len(rule) < count:
3938
raise TypeError("grouping policy elements do not meet role definition")
40-
if(len(rule) > count):
41-
rule = rule[0, count]
39+
if len(rule) > count:
40+
rule = rule[:count]
4241
if op == PolicyOp.Policy_add:
43-
rm.add_link(rule[0], rule[1], rule[2: len(rule)])
42+
rm.add_link(rule[0], rule[1], *rule[2:])
4443
elif op == PolicyOp.Policy_remove:
45-
rm.delete_link(rule[0], rule[1], rule[2: len(rule)])
44+
rm.delete_link(rule[0], rule[1], *rule[2:])
4645
else:
47-
raise TypeError("Invalid operation: " + str(op))
46+
raise TypeError("Invalid operation: " + str(op))

casbin/rbac/default_role_manager/role_manager.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ class RoleManager(RoleManager):
99
all_roles = dict()
1010
max_hierarchy_level = 0
1111

12-
1312
def __init__(self, max_hierarchy_level):
1413
self.logger = logging.getLogger()
1514
self.all_roles = dict()
@@ -47,9 +46,8 @@ def clear(self):
4746

4847
def add_link(self, name1, name2, *domain):
4948
if len(domain) == 1:
50-
if len(domain[0]) > 1:
51-
name1 = domain[0] + "::" + name1
52-
name2 = domain[0] + "::" + name2
49+
name1 = domain[0] + "::" + name1
50+
name2 = domain[0] + "::" + name2
5351
elif len(domain) > 1:
5452
raise RuntimeError("error: domain should be 1 parameter")
5553

@@ -70,9 +68,8 @@ def add_link(self, name1, name2, *domain):
7068

7169
def delete_link(self, name1, name2, *domain):
7270
if len(domain) == 1:
73-
if len(domain[0]) > 1:
74-
name1 = domain[0] + "::" + name1
75-
name2 = domain[0] + "::" + name2
71+
name1 = domain[0] + "::" + name1
72+
name2 = domain[0] + "::" + name2
7673
elif len(domain) > 1:
7774
raise RuntimeError("error: domain should be 1 parameter")
7875

@@ -101,9 +98,10 @@ def has_link(self, name1, name2, *domain):
10198
return role1.has_role(name2, self.max_hierarchy_level)
10299
else:
103100
for key, role in self.all_roles.items():
104-
if self.matching_func(name1, key) and role.has_role(name2, self.max_hierarchy_level, self.matching_func):
101+
if self.matching_func(name1, key) and role.has_role(name2, self.max_hierarchy_level,
102+
self.matching_func):
105103
return True
106-
return False
104+
return False
107105

108106
def get_roles(self, name, domain=None):
109107
"""

0 commit comments

Comments
 (0)