1+ <?php
2+
3+ namespace Casbin \WebmanPermission \Tests ;
4+
5+ use Casbin \WebmanPermission \Permission ;
6+ use Casbin \WebmanPermission \Adapter \DatabaseAdapter ;
7+ use Casbin \WebmanPermission \Adapter \LaravelDatabaseAdapter ;
8+ use Casbin \Exceptions \CasbinException ;
9+ use PHPUnit \Framework \TestCase ;
10+
11+ class SimplePermissionTest extends TestCase
12+ {
13+ protected function setUp (): void
14+ {
15+ // 模拟配置
16+ global $ config ;
17+ $ config = [
18+ 'plugin ' => [
19+ 'casbin ' => [
20+ 'webman-permission ' => [
21+ 'permission ' => [
22+ 'default ' => 'default ' ,
23+ 'default ' => [
24+ 'model ' => [
25+ 'config_type ' => 'text ' ,
26+ 'config_text ' => '
27+ [request_definition]
28+ r = sub, obj, act
29+
30+ [policy_definition]
31+ p = sub, obj, act
32+
33+ [role_definition]
34+ g = _, _
35+
36+ [policy_effect]
37+ e = some(where (p.eft == allow))
38+
39+ [matchers]
40+ m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
41+ ' ,
42+ ],
43+ 'adapter ' => \Casbin \WebmanPermission \Adapter \DatabaseAdapter::class,
44+ ],
45+ 'other ' => [
46+ 'model ' => [
47+ 'config_type ' => 'text ' ,
48+ 'config_text ' => '
49+ [request_definition]
50+ r = sub, obj, act
51+
52+ [policy_definition]
53+ p = sub, obj, act
54+
55+ [role_definition]
56+ g = _, _
57+
58+ [policy_effect]
59+ e = some(where (p.eft == allow))
60+
61+ [matchers]
62+ m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
63+ ' ,
64+ ],
65+ 'adapter ' => \Casbin \WebmanPermission \Adapter \DatabaseAdapter::class,
66+ 'adapter_config ' => [
67+ 'table ' => 'other_casbin_rule '
68+ ],
69+ ],
70+ 'log ' => [
71+ 'enabled ' => false ,
72+ 'logger ' => 'casbin ' ,
73+ 'path ' => '/tmp/casbin.log ' ,
74+ ],
75+ ]
76+ ]
77+ ]
78+ ]
79+ ];
80+
81+ Permission::clear ();
82+ }
83+
84+ public function testBasicPermission ()
85+ {
86+ $ result = Permission::addPolicy ('writer ' , 'articles ' , 'edit ' );
87+ $ this ->assertTrue ($ result );
88+
89+ $ result = Permission::enforce ('writer ' , 'articles ' , 'edit ' );
90+ $ this ->assertTrue ($ result );
91+
92+ $ result = Permission::enforce ('writer ' , 'articles ' , 'delete ' );
93+ $ this ->assertFalse ($ result );
94+ }
95+
96+ public function testRoleManagement ()
97+ {
98+ $ result = Permission::addRoleForUser ('alice ' , 'admin ' );
99+ $ this ->assertTrue ($ result );
100+
101+ $ result = Permission::hasRoleForUser ('alice ' , 'admin ' );
102+ $ this ->assertTrue ($ result );
103+
104+ $ roles = Permission::getRolesForUser ('alice ' );
105+ $ this ->assertContains ('admin ' , $ roles );
106+ }
107+
108+ public function testPermissionForUser ()
109+ {
110+ $ result = Permission::addPermissionForUser ('alice ' , 'data1 ' , 'read ' );
111+ $ this ->assertTrue ($ result );
112+
113+ $ result = Permission::enforce ('alice ' , 'data1 ' , 'read ' );
114+ $ this ->assertTrue ($ result );
115+
116+ $ permissions = Permission::getPermissionsForUser ('alice ' );
117+ $ this ->assertContains (['alice ' , 'data1 ' , 'read ' ], $ permissions );
118+ }
119+
120+ public function testBatchOperations ()
121+ {
122+ $ policies = [
123+ ['alice ' , 'data1 ' , 'read ' ],
124+ ['bob ' , 'data2 ' , 'write ' ]
125+ ];
126+
127+ $ result = Permission::addPolicies ($ policies );
128+ $ this ->assertTrue ($ result );
129+
130+ $ this ->assertTrue (Permission::enforce ('alice ' , 'data1 ' , 'read ' ));
131+ $ this ->assertTrue (Permission::enforce ('bob ' , 'data2 ' , 'write ' ));
132+ }
133+
134+ public function testPolicyUpdate ()
135+ {
136+ Permission::addPolicy ('writer ' , 'articles ' , 'edit ' );
137+ $ this ->assertTrue (Permission::hasPolicy ('writer ' , 'articles ' , 'edit ' ));
138+
139+ $ result = Permission::updatePolicies (
140+ [['writer ' , 'articles ' , 'edit ' ]],
141+ [['writer ' , 'articles ' , 'update ' ]]
142+ );
143+ $ this ->assertTrue ($ result );
144+
145+ $ this ->assertFalse (Permission::hasPolicy ('writer ' , 'articles ' , 'edit ' ));
146+ $ this ->assertTrue (Permission::hasPolicy ('writer ' , 'articles ' , 'update ' ));
147+ }
148+
149+ public function testRemoveOperations ()
150+ {
151+ Permission::addPolicy ('writer ' , 'articles ' , 'edit ' );
152+ $ this ->assertTrue (Permission::hasPolicy ('writer ' , 'articles ' , 'edit ' ));
153+
154+ $ result = Permission::removePolicy ('writer ' , 'articles ' , 'edit ' );
155+ $ this ->assertTrue ($ result );
156+ $ this ->assertFalse (Permission::hasPolicy ('writer ' , 'articles ' , 'edit ' ));
157+ }
158+
159+ public function testDriverManagement ()
160+ {
161+ $ driver = Permission::getDefaultDriver ();
162+ $ this ->assertNotEmpty ($ driver );
163+
164+ $ drivers = Permission::getAllDriver ();
165+ $ this ->assertIsArray ($ drivers );
166+ }
167+
168+ public function testClear ()
169+ {
170+ Permission::addPolicy ('writer ' , 'articles ' , 'edit ' );
171+ $ this ->assertTrue (Permission::hasPolicy ('writer ' , 'articles ' , 'edit ' ));
172+
173+ Permission::clear ();
174+ $ this ->assertFalse (Permission::hasPolicy ('writer ' , 'articles ' , 'edit ' ));
175+ }
176+
177+ protected function tearDown (): void
178+ {
179+ Permission::clear ();
180+ }
181+ }
0 commit comments