@@ -228,6 +228,132 @@ public function testUpdatePolicies()
228228 ], $ e ->getPolicy ());
229229 }
230230
231+ public function arrayEqualsWithoutOrder (array $ expected , array $ actual )
232+ {
233+ if (method_exists ($ this , 'assertEqualsCanonicalizing ' )) {
234+ $ this ->assertEqualsCanonicalizing ($ expected , $ actual );
235+ } else {
236+ array_multisort ($ expected );
237+ array_multisort ($ actual );
238+ $ this ->assertEquals ($ expected , $ actual );
239+ }
240+ }
241+
242+ public function testUpdateFilteredPolicies ()
243+ {
244+ $ e = $ this ->getEnforcer ();
245+ $ this ->assertEquals ([
246+ ['alice ' , 'data1 ' , 'read ' ],
247+ ['bob ' , 'data2 ' , 'write ' ],
248+ ['data2_admin ' , 'data2 ' , 'read ' ],
249+ ['data2_admin ' , 'data2 ' , 'write ' ],
250+ ], $ e ->getPolicy ());
251+
252+ $ e ->updateFilteredPolicies ([["alice " , "data1 " , "write " ]], 0 , "alice " , "data1 " , "read " );
253+ $ e ->updateFilteredPolicies ([["bob " , "data2 " , "read " ]], 0 , "bob " , "data2 " , "write " );
254+
255+ $ policies = [
256+ ['alice ' , 'data1 ' , 'write ' ],
257+ ['bob ' , 'data2 ' , 'read ' ],
258+ ['data2_admin ' , 'data2 ' , 'read ' ],
259+ ['data2_admin ' , 'data2 ' , 'write ' ]
260+ ];
261+
262+ $ this ->arrayEqualsWithoutOrder ($ policies , $ e ->getPolicy ());
263+
264+ // test use updateFilteredPolicies to update all policies of a user
265+ $ e = $ this ->getEnforcer ();
266+ $ policies = [
267+ ['alice ' , 'data2 ' , 'write ' ],
268+ ['bob ' , 'data1 ' , 'read ' ]
269+ ];
270+
271+ $ e ->addPolicies ($ policies );
272+
273+ $ this ->arrayEqualsWithoutOrder ([
274+ ['alice ' , 'data1 ' , 'read ' ],
275+ ['bob ' , 'data2 ' , 'write ' ],
276+ ['data2_admin ' , 'data2 ' , 'read ' ],
277+ ['data2_admin ' , 'data2 ' , 'write ' ],
278+ ['alice ' , 'data2 ' , 'write ' ],
279+ ['bob ' , 'data1 ' , 'read ' ]
280+ ], $ e ->getPolicy ());
281+
282+ $ e ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['alice ' , 'data2 ' , 'read ' ]], 0 , 'alice ' );
283+ $ e ->updateFilteredPolicies ([['bob ' , 'data1 ' , 'write ' ], ["bob " , "data2 " , "read " ]], 0 , 'bob ' );
284+
285+ $ policies = [
286+ ['alice ' , 'data1 ' , 'write ' ],
287+ ['alice ' , 'data2 ' , 'read ' ],
288+ ['bob ' , 'data1 ' , 'write ' ],
289+ ['bob ' , 'data2 ' , 'read ' ],
290+ ['data2_admin ' , 'data2 ' , 'read ' ],
291+ ['data2_admin ' , 'data2 ' , 'write ' ]
292+ ];
293+
294+ $ this ->arrayEqualsWithoutOrder ($ policies , $ e ->getPolicy ());
295+
296+ // test if $fieldValues contains empty string
297+ $ e = $ this ->getEnforcer ();
298+ $ policies = [
299+ ['alice ' , 'data2 ' , 'write ' ],
300+ ['bob ' , 'data1 ' , 'read ' ]
301+ ];
302+ $ e ->addPolicies ($ policies );
303+
304+ $ this ->assertEquals ([
305+ ['alice ' , 'data1 ' , 'read ' ],
306+ ['bob ' , 'data2 ' , 'write ' ],
307+ ['data2_admin ' , 'data2 ' , 'read ' ],
308+ ['data2_admin ' , 'data2 ' , 'write ' ],
309+ ['alice ' , 'data2 ' , 'write ' ],
310+ ['bob ' , 'data1 ' , 'read ' ]
311+ ], $ e ->getPolicy ());
312+
313+ $ e ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['alice ' , 'data2 ' , 'read ' ]], 0 , 'alice ' , '' , '' );
314+ $ e ->updateFilteredPolicies ([['bob ' , 'data1 ' , 'write ' ], ["bob " , "data2 " , "read " ]], 0 , 'bob ' , '' , '' );
315+
316+ $ policies = [
317+ ['alice ' , 'data1 ' , 'write ' ],
318+ ['alice ' , 'data2 ' , 'read ' ],
319+ ['bob ' , 'data1 ' , 'write ' ],
320+ ['bob ' , 'data2 ' , 'read ' ],
321+ ['data2_admin ' , 'data2 ' , 'read ' ],
322+ ['data2_admin ' , 'data2 ' , 'write ' ]
323+ ];
324+
325+ $ this ->arrayEqualsWithoutOrder ($ policies , $ e ->getPolicy ());
326+
327+ // test if $fieldIndex is not zero
328+ $ e = $ this ->getEnforcer ();
329+ $ policies = [
330+ ['alice ' , 'data2 ' , 'write ' ],
331+ ['bob ' , 'data1 ' , 'read ' ]
332+ ];
333+ $ e ->addPolicies ($ policies );
334+
335+ $ this ->assertEquals ([
336+ ['alice ' , 'data1 ' , 'read ' ],
337+ ['bob ' , 'data2 ' , 'write ' ],
338+ ['data2_admin ' , 'data2 ' , 'read ' ],
339+ ['data2_admin ' , 'data2 ' , 'write ' ],
340+ ['alice ' , 'data2 ' , 'write ' ],
341+ ['bob ' , 'data1 ' , 'read ' ]
342+ ], $ e ->getPolicy ());
343+
344+ $ e ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'edit ' ], ['bob ' , 'data1 ' , 'edit ' ]], 2 , 'read ' );
345+ $ e ->updateFilteredPolicies ([['alice ' , 'data2 ' , 'read ' ], ["bob " , "data2 " , "read " ]], 2 , 'write ' );
346+
347+ $ policies = [
348+ ['alice ' , 'data1 ' , 'edit ' ],
349+ ['alice ' , 'data2 ' , 'read ' ],
350+ ['bob ' , 'data1 ' , 'edit ' ],
351+ ['bob ' , 'data2 ' , 'read ' ],
352+ ];
353+
354+ $ this ->arrayEqualsWithoutOrder ($ policies , $ e ->getPolicy ());
355+ }
356+
231357 public function testLoadFilteredPolicy ()
232358 {
233359 $ e = $ this ->getEnforcer ();
0 commit comments