@@ -159,6 +159,133 @@ public function testUpdatePolicies()
159159 ], Enforcer::getPolicy ());
160160 }
161161
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+
162289 public function testLoadFilteredPolicy ()
163290 {
164291 $ this ->initTable ();
0 commit comments