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