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