@@ -159,6 +159,133 @@ public function testUpdatePolicies()
159
159
], Enforcer::getPolicy ());
160
160
}
161
161
162
+ public function arrayEqualsWithoutOrder (array $ expected , array $ actual )
163
+ {
164
+ if (method_exists ($ this , 'assertEqualsCanonicalizing ' )) {
165
+ $ this ->assertEqualsCanonicalizing ($ expected , $ actual );
166
+ } else {
167
+ array_multisort ($ expected );
168
+ array_multisort ($ actual );
169
+ $ this ->assertEquals ($ expected , $ actual );
170
+ }
171
+ }
172
+
173
+ public function testUpdateFilteredPolicies ()
174
+ {
175
+ $ this ->assertEquals ([
176
+ ['alice ' , 'data1 ' , 'read ' ],
177
+ ['bob ' , 'data2 ' , 'write ' ],
178
+ ['data2_admin ' , 'data2 ' , 'read ' ],
179
+ ['data2_admin ' , 'data2 ' , 'write ' ],
180
+ ], Enforcer::getPolicy ());
181
+
182
+ Enforcer::updateFilteredPolicies ([["alice " , "data1 " , "write " ]], 0 , "alice " , "data1 " , "read " );
183
+ Enforcer::updateFilteredPolicies ([["bob " , "data2 " , "read " ]], 0 , "bob " , "data2 " , "write " );
184
+
185
+ $ policies = [
186
+ ['alice ' , 'data1 ' , 'write ' ],
187
+ ['bob ' , 'data2 ' , 'read ' ],
188
+ ['data2_admin ' , 'data2 ' , 'read ' ],
189
+ ['data2_admin ' , 'data2 ' , 'write ' ]
190
+ ];
191
+
192
+ $ this ->arrayEqualsWithoutOrder ($ policies , Enforcer::getPolicy ());
193
+
194
+ // test use updateFilteredPolicies to update all policies of a user
195
+ $ this ->initTable ();
196
+ Enforcer::loadPolicy ();
197
+ $ policies = [
198
+ ['alice ' , 'data2 ' , 'write ' ],
199
+ ['bob ' , 'data1 ' , 'read ' ]
200
+ ];
201
+ Enforcer::addPolicies ($ policies );
202
+
203
+ $ this ->arrayEqualsWithoutOrder ([
204
+ ['alice ' , 'data1 ' , 'read ' ],
205
+ ['bob ' , 'data2 ' , 'write ' ],
206
+ ['data2_admin ' , 'data2 ' , 'read ' ],
207
+ ['data2_admin ' , 'data2 ' , 'write ' ],
208
+ ['alice ' , 'data2 ' , 'write ' ],
209
+ ['bob ' , 'data1 ' , 'read ' ]
210
+ ], Enforcer::getPolicy ());
211
+
212
+ Enforcer::updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['alice ' , 'data2 ' , 'read ' ]], 0 , 'alice ' );
213
+ Enforcer::updateFilteredPolicies ([['bob ' , 'data1 ' , 'write ' ], ["bob " , "data2 " , "read " ]], 0 , 'bob ' );
214
+
215
+ $ policies = [
216
+ ['alice ' , 'data1 ' , 'write ' ],
217
+ ['alice ' , 'data2 ' , 'read ' ],
218
+ ['bob ' , 'data1 ' , 'write ' ],
219
+ ['bob ' , 'data2 ' , 'read ' ],
220
+ ['data2_admin ' , 'data2 ' , 'read ' ],
221
+ ['data2_admin ' , 'data2 ' , 'write ' ]
222
+ ];
223
+
224
+ $ this ->arrayEqualsWithoutOrder ($ policies , Enforcer::getPolicy ());
225
+
226
+ // test if $fieldValues contains empty string
227
+ $ this ->initTable ();
228
+ Enforcer::loadPolicy ();
229
+ $ policies = [
230
+ ['alice ' , 'data2 ' , 'write ' ],
231
+ ['bob ' , 'data1 ' , 'read ' ]
232
+ ];
233
+ Enforcer::addPolicies ($ policies );
234
+
235
+ $ this ->assertEquals ([
236
+ ['alice ' , 'data1 ' , 'read ' ],
237
+ ['bob ' , 'data2 ' , 'write ' ],
238
+ ['data2_admin ' , 'data2 ' , 'read ' ],
239
+ ['data2_admin ' , 'data2 ' , 'write ' ],
240
+ ['alice ' , 'data2 ' , 'write ' ],
241
+ ['bob ' , 'data1 ' , 'read ' ]
242
+ ], Enforcer::getPolicy ());
243
+
244
+ Enforcer::updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['alice ' , 'data2 ' , 'read ' ]], 0 , 'alice ' , '' , '' );
245
+ Enforcer::updateFilteredPolicies ([['bob ' , 'data1 ' , 'write ' ], ["bob " , "data2 " , "read " ]], 0 , 'bob ' , '' , '' );
246
+
247
+ $ policies = [
248
+ ['alice ' , 'data1 ' , 'write ' ],
249
+ ['alice ' , 'data2 ' , 'read ' ],
250
+ ['bob ' , 'data1 ' , 'write ' ],
251
+ ['bob ' , 'data2 ' , 'read ' ],
252
+ ['data2_admin ' , 'data2 ' , 'read ' ],
253
+ ['data2_admin ' , 'data2 ' , 'write ' ]
254
+ ];
255
+
256
+ $ this ->arrayEqualsWithoutOrder ($ policies , Enforcer::getPolicy ());
257
+
258
+ // test if $fieldIndex is not zero
259
+ $ this ->initTable ();
260
+ Enforcer::loadPolicy ();
261
+ $ policies = [
262
+ ['alice ' , 'data2 ' , 'write ' ],
263
+ ['bob ' , 'data1 ' , 'read ' ]
264
+ ];
265
+ Enforcer::addPolicies ($ policies );
266
+
267
+ $ this ->assertEquals ([
268
+ ['alice ' , 'data1 ' , 'read ' ],
269
+ ['bob ' , 'data2 ' , 'write ' ],
270
+ ['data2_admin ' , 'data2 ' , 'read ' ],
271
+ ['data2_admin ' , 'data2 ' , 'write ' ],
272
+ ['alice ' , 'data2 ' , 'write ' ],
273
+ ['bob ' , 'data1 ' , 'read ' ]
274
+ ], Enforcer::getPolicy ());
275
+
276
+ Enforcer::updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['bob ' , 'data1 ' , 'write ' ]], 2 , 'read ' );
277
+ Enforcer::updateFilteredPolicies ([['alice ' , 'data2 ' , 'read ' ], ["bob " , "data2 " , "read " ]], 2 , 'write ' );
278
+
279
+ $ policies = [
280
+ ['alice ' , 'data1 ' , 'write ' ],
281
+ ['alice ' , 'data2 ' , 'read ' ],
282
+ ['bob ' , 'data1 ' , 'write ' ],
283
+ ['bob ' , 'data2 ' , 'read ' ],
284
+ ];
285
+
286
+ $ this ->arrayEqualsWithoutOrder ($ policies , Enforcer::getPolicy ());
287
+ }
288
+
162
289
public function testLoadFilteredPolicy ()
163
290
{
164
291
$ this ->initTable ();
0 commit comments