@@ -273,6 +273,131 @@ public function testUpdatePolicies()
273273 ], $ e ->getPolicy ());
274274 }
275275
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+
276401 protected function env ($ key , $ default = null )
277402 {
278403 $ value = getenv ($ key );
0 commit comments