@@ -273,6 +273,131 @@ public function testUpdatePolicies()
273
273
], $ e ->getPolicy ());
274
274
}
275
275
276
+ public function arrayEqualsWithoutOrder (array $ expected , array $ actual )
277
+ {
278
+ if (method_exists ($ this , 'assertEqualsCanonicalizing ' )) {
279
+ $ this ->assertEqualsCanonicalizing ($ expected , $ actual );
280
+ } else {
281
+ array_multisort ($ expected );
282
+ array_multisort ($ actual );
283
+ $ this ->assertEquals ($ expected , $ actual );
284
+ }
285
+ }
286
+
287
+ public function testUpdateFilteredPolicies ()
288
+ {
289
+ $ e = $ this ->getEnforcer ();
290
+ $ this ->assertEquals ([
291
+ ['alice ' , 'data1 ' , 'read ' ],
292
+ ['bob ' , 'data2 ' , 'write ' ],
293
+ ['data2_admin ' , 'data2 ' , 'read ' ],
294
+ ['data2_admin ' , 'data2 ' , 'write ' ],
295
+ ], $ e ->getPolicy ());
296
+
297
+ $ e ->updateFilteredPolicies ([["alice " , "data1 " , "write " ]], 0 , "alice " , "data1 " , "read " );
298
+ $ e ->updateFilteredPolicies ([["bob " , "data2 " , "read " ]], 0 , "bob " , "data2 " , "write " );
299
+
300
+ $ policies = [
301
+ ['alice ' , 'data1 ' , 'write ' ],
302
+ ['bob ' , 'data2 ' , 'read ' ],
303
+ ['data2_admin ' , 'data2 ' , 'read ' ],
304
+ ['data2_admin ' , 'data2 ' , 'write ' ]
305
+ ];
306
+
307
+ $ this ->arrayEqualsWithoutOrder ($ policies , $ e ->getPolicy ());
308
+
309
+ // test use updateFilteredPolicies to update all policies of a user
310
+ $ e = $ this ->getEnforcer ();
311
+ $ policies = [
312
+ ['alice ' , 'data2 ' , 'write ' ],
313
+ ['bob ' , 'data1 ' , 'read ' ]
314
+ ];
315
+ $ e ->addPolicies ($ policies );
316
+
317
+ $ this ->arrayEqualsWithoutOrder ([
318
+ ['alice ' , 'data1 ' , 'read ' ],
319
+ ['bob ' , 'data2 ' , 'write ' ],
320
+ ['data2_admin ' , 'data2 ' , 'read ' ],
321
+ ['data2_admin ' , 'data2 ' , 'write ' ],
322
+ ['alice ' , 'data2 ' , 'write ' ],
323
+ ['bob ' , 'data1 ' , 'read ' ]
324
+ ], $ e ->getPolicy ());
325
+
326
+ $ e ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['alice ' , 'data2 ' , 'read ' ]], 0 , 'alice ' );
327
+ $ e ->updateFilteredPolicies ([['bob ' , 'data1 ' , 'write ' ], ["bob " , "data2 " , "read " ]], 0 , 'bob ' );
328
+
329
+ $ policies = [
330
+ ['alice ' , 'data1 ' , 'write ' ],
331
+ ['alice ' , 'data2 ' , 'read ' ],
332
+ ['bob ' , 'data1 ' , 'write ' ],
333
+ ['bob ' , 'data2 ' , 'read ' ],
334
+ ['data2_admin ' , 'data2 ' , 'read ' ],
335
+ ['data2_admin ' , 'data2 ' , 'write ' ]
336
+ ];
337
+
338
+ $ this ->arrayEqualsWithoutOrder ($ policies , $ e ->getPolicy ());
339
+
340
+ // test if $fieldValues contains empty string
341
+ $ e = $ this ->getEnforcer ();
342
+ $ policies = [
343
+ ['alice ' , 'data2 ' , 'write ' ],
344
+ ['bob ' , 'data1 ' , 'read ' ]
345
+ ];
346
+ $ e ->addPolicies ($ policies );
347
+
348
+ $ this ->assertEquals ([
349
+ ['alice ' , 'data1 ' , 'read ' ],
350
+ ['bob ' , 'data2 ' , 'write ' ],
351
+ ['data2_admin ' , 'data2 ' , 'read ' ],
352
+ ['data2_admin ' , 'data2 ' , 'write ' ],
353
+ ['alice ' , 'data2 ' , 'write ' ],
354
+ ['bob ' , 'data1 ' , 'read ' ]
355
+ ], $ e ->getPolicy ());
356
+
357
+ $ e ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['alice ' , 'data2 ' , 'read ' ]], 0 , 'alice ' , '' , '' );
358
+ $ e ->updateFilteredPolicies ([['bob ' , 'data1 ' , 'write ' ], ["bob " , "data2 " , "read " ]], 0 , 'bob ' , '' , '' );
359
+
360
+ $ policies = [
361
+ ['alice ' , 'data1 ' , 'write ' ],
362
+ ['alice ' , 'data2 ' , 'read ' ],
363
+ ['bob ' , 'data1 ' , 'write ' ],
364
+ ['bob ' , 'data2 ' , 'read ' ],
365
+ ['data2_admin ' , 'data2 ' , 'read ' ],
366
+ ['data2_admin ' , 'data2 ' , 'write ' ]
367
+ ];
368
+
369
+ $ this ->arrayEqualsWithoutOrder ($ policies , $ e ->getPolicy ());
370
+
371
+ // test if $fieldIndex is not zero
372
+ $ e = $ this ->getEnforcer ();
373
+ $ policies = [
374
+ ['alice ' , 'data2 ' , 'write ' ],
375
+ ['bob ' , 'data1 ' , 'read ' ]
376
+ ];
377
+ $ e ->addPolicies ($ policies );
378
+
379
+ $ this ->assertEquals ([
380
+ ['alice ' , 'data1 ' , 'read ' ],
381
+ ['bob ' , 'data2 ' , 'write ' ],
382
+ ['data2_admin ' , 'data2 ' , 'read ' ],
383
+ ['data2_admin ' , 'data2 ' , 'write ' ],
384
+ ['alice ' , 'data2 ' , 'write ' ],
385
+ ['bob ' , 'data1 ' , 'read ' ]
386
+ ], $ e ->getPolicy ());
387
+
388
+ $ e ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'edit ' ], ['bob ' , 'data1 ' , 'edit ' ]], 2 , 'read ' );
389
+ $ e ->updateFilteredPolicies ([['alice ' , 'data2 ' , 'read ' ], ["bob " , "data2 " , "read " ]], 2 , 'write ' );
390
+
391
+ $ policies = [
392
+ ['alice ' , 'data1 ' , 'edit ' ],
393
+ ['alice ' , 'data2 ' , 'read ' ],
394
+ ['bob ' , 'data1 ' , 'edit ' ],
395
+ ['bob ' , 'data2 ' , 'read ' ],
396
+ ];
397
+
398
+ $ this ->arrayEqualsWithoutOrder ($ policies , $ e ->getPolicy ());
399
+ }
400
+
276
401
protected function env ($ key , $ default = null )
277
402
{
278
403
$ value = getenv ($ key );
0 commit comments