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