1+ from casbin_pymongo_adapter .adapter import Adapter
2+ from casbin_pymongo_adapter .adapter import CasbinRule
3+ from unittest import TestCase
4+ import casbin
5+ import os
6+ import simpleeval
7+
8+ def get_fixture (path ):
9+ '''
10+ get model path
11+ '''
12+ dir_path = os .path .split (os .path .realpath (__file__ ))[0 ] + "/"
13+ return os .path .abspath (dir_path + path )
14+
15+
16+ def get_enforcer ():
17+ adapter = Adapter ('mongodb://localhost:27017' , 'casbin_test' )
18+ c1 = CasbinRule (ptype = 'p' , v0 = 'alice' , v1 = 'data1' , v2 = 'read' )
19+ adapter .save_policy (c1 )
20+ c2 = CasbinRule (ptype = 'p' , v0 = 'bob' , v1 = 'data2' , v2 = 'write' )
21+ adapter .save_policy (c2 )
22+ c3 = CasbinRule (ptype = 'p' , v0 = 'data2_admin' , v1 = 'data2' , v2 = 'read' )
23+ adapter .save_policy (c3 )
24+ c4 = CasbinRule (ptype = 'p' , v0 = 'data2_admin' , v1 = 'data2' , v2 = 'write' )
25+ adapter .save_policy (c4 )
26+ c5 = CasbinRule (ptype = 'g' , v0 = 'alice' , v1 = 'data2_admin' )
27+ adapter .save_policy (c5 )
28+
29+ return casbin .Enforcer (get_fixture ('rbac_model.conf' ), adapter , True )
30+
31+
32+ class TestConfig (TestCase ):
33+ '''
34+ unittest
35+ '''
36+
37+ def test_enforcer_basic (self ):
38+ '''
39+ test policy
40+ '''
41+ e = get_enforcer ()
42+ self .assertFalse (e .enforce ('alice' , 'data1' , 'write' ))
43+ self .assertFalse (e .enforce ('bob' , 'data1' , 'read' ))
44+ self .assertTrue (e .enforce ('bob' , 'data2' , 'write' ))
45+ self .assertTrue (e .enforce ('alice' , 'data2' , 'read' ))
46+ self .assertTrue (e .enforce ('alice' , 'data2' , 'write' ))
47+
48+ def test_add_policy (self ):
49+ '''
50+ test add_policy
51+ '''
52+ adapter = Adapter ('mongodb://localhost:27017' , 'casbin_test' )
53+ e = casbin .Enforcer (get_fixture ('rbac_model.conf' ), adapter , True )
54+
55+ try :
56+ self .assertFalse (e .enforce ('alice' , 'data1' , 'write' ))
57+ self .assertFalse (e .enforce ('bob' , 'data1' , 'read' ))
58+ self .assertFalse (e .enforce ('bob' , 'data2' , 'write' ))
59+ self .assertFalse (e .enforce ('alice' , 'data2' , 'read' ))
60+ self .assertFalse (e .enforce ('alice' , 'data2' , 'write' ))
61+ except simpleeval .NameNotDefined :
62+ # This is caused by an upstream bug when there is no policy loaded
63+ # Should be resolved in pycasbin >= 0.3
64+ pass
65+
66+ adapter .add_policy (sec = None , ptype = 'p' , rule = ['alice' , 'data1' , 'read' ])
67+ adapter .add_policy (sec = None , ptype = 'p' , rule = ['bob' , 'data2' , 'write' ])
68+ adapter .add_policy (sec = None , ptype = 'p' , rule = ['data2_admin' , 'data2' , 'read' ])
69+ adapter .add_policy (sec = None , ptype = 'p' , rule = ['data2_admin' , 'data2' , 'write' ])
70+ adapter .add_policy (sec = None , ptype = 'g' , rule = ['alice' , 'data2_admin' ])
71+
72+ e .load_policy ()
73+
74+ self .assertFalse (e .enforce ('alice' , 'data1' , 'write' ))
75+ self .assertFalse (e .enforce ('bob' , 'data1' , 'read' ))
76+ self .assertTrue (e .enforce ('bob' , 'data2' , 'write' ))
77+ self .assertTrue (e .enforce ('alice' , 'data2' , 'read' ))
78+ self .assertTrue (e .enforce ('alice' , 'data2' , 'write' ))
79+ self .assertFalse (e .enforce ('bogus' , 'data2' , 'write' ))
80+
81+ def test_save_policy (self ):
82+ '''
83+ test save_policy
84+ '''
85+ model = casbin .Enforcer (get_fixture ('rbac_model.conf' ), get_fixture ('rbac_policy.csv' )).model
86+ adapter = Adapter ('mongodb://localhost:27017' , 'casbin_test' )
87+ adapter .save_policy (model )
88+ e = casbin .Enforcer (get_fixture ('rbac_model.conf' ), adapter )
89+
90+ self .assertFalse (e .enforce ('alice' , 'data1' , 'read' ))
91+ self .assertFalse (e .enforce ('bob' , 'data1' , 'read' ))
92+ self .assertTrue (e .enforce ('bob' , 'data2' , 'write' ))
93+ self .assertTrue (e .enforce ('alice' , 'data2' , 'read' ))
94+ self .assertTrue (e .enforce ('alice' , 'data2' , 'write' ))
95+
96+ def test_str (self ):
97+ '''
98+ test __str__ function
99+ '''
100+ rule = CasbinRule (ptype = 'p' , v0 = 'alice' , v1 = 'data1' , v2 = 'read' )
101+ self .assertEqual (str (rule ), 'p, alice, data1, read' )
102+
103+ def test_repr (self ):
104+ '''
105+ test __repr__ function
106+ '''
107+ adapter = Adapter ('mongodb://localhost:27017' , 'casbin_test' )
108+ rule = CasbinRule (ptype = 'p' , v0 = 'alice' , v1 = 'data1' , v2 = 'read' )
109+ self .assertEqual (repr (rule ), '<CasbinRule :"p, alice, data1, read">' )
110+ adapter .save_policy (rule )
111+ self .assertRegex (repr (rule ), r'<CasbinRule :"p, alice, data1, read">' )
0 commit comments