Skip to content

Commit 23860cf

Browse files
author
mbierma
committed
fix: FastEnforcer not fast
1 parent d90b8c7 commit 23860cf

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Diff for: casbin/fast_enforcer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def enforce(self, *rvals):
3131
"""decides whether a "subject" can access a "object" with the operation "action",
3232
input parameters are usually: (sub, obj, act).
3333
"""
34-
if FastEnforcer._cache_key_order is None:
34+
if self._cache_key_order is None:
3535
result, _ = self.enforce_ex(*rvals)
3636
else:
3737
keys = [rvals[x] for x in self._cache_key_order]

Diff for: tests/test_fast_enforcer.py

+19
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# limitations under the License.
1414

1515
import os
16+
import time
1617
from typing import Sequence
1718
from unittest import TestCase
1819

@@ -35,6 +36,24 @@ def get_enforcer(self, model=None, adapter=None, cache_key_order: Sequence[int]
3536

3637

3738
class TestFastEnforcer(TestCaseBase):
39+
def test_performance(self) -> None:
40+
e1 = self.get_enforcer(
41+
get_examples("performance/rbac_with_pattern_large_scale_model.conf"),
42+
get_examples("performance/rbac_with_pattern_large_scale_policy.csv"),
43+
)
44+
e2 = self.get_enforcer(
45+
get_examples("performance/rbac_with_pattern_large_scale_model.conf"),
46+
get_examples("performance/rbac_with_pattern_large_scale_policy.csv"),
47+
[2, 1],
48+
)
49+
s_e1 = time.perf_counter()
50+
e1.enforce("alice", "data1", "read")
51+
t_e1 = time.perf_counter() - s_e1
52+
s_e2 = time.perf_counter()
53+
e2.enforce("alice", "data1", "read")
54+
t_e2 = time.perf_counter() - s_e2
55+
assert t_e1 > t_e2 * 5
56+
3857
def test_creates_proper_policy(self) -> None:
3958
e = self.get_enforcer(
4059
get_examples("basic_model.conf"),

0 commit comments

Comments
 (0)