@@ -106,6 +106,190 @@ public function testRemoveFilteredPolicy()
106106        $ this  ->assertFalse (Yii::$ app ->permission ->enforce ('alice ' , 'data2 ' , 'write ' ));
107107    }
108108
109+     public  function  testUpdatePolicy ()
110+     {
111+         $ this  ->assertEquals ([
112+             ['alice ' , 'data1 ' , 'read ' ],
113+             ['bob ' , 'data2 ' , 'write ' ],
114+             ['data2_admin ' , 'data2 ' , 'read ' ],
115+             ['data2_admin ' , 'data2 ' , 'write ' ],
116+         ], Yii::$ app ->permission ->getPolicy ());
117+ 
118+         Yii::$ app ->permission ->updatePolicy (
119+             ['alice ' , 'data1 ' , 'read ' ],
120+             ['alice ' , 'data1 ' , 'write ' ]
121+         );
122+ 
123+         Yii::$ app ->permission ->updatePolicy (
124+             ['bob ' , 'data2 ' , 'write ' ],
125+             ['bob ' , 'data2 ' , 'read ' ]
126+         );
127+ 
128+         $ this  ->assertEquals ([
129+             ['alice ' , 'data1 ' , 'write ' ],
130+             ['bob ' , 'data2 ' , 'read ' ],
131+             ['data2_admin ' , 'data2 ' , 'read ' ],
132+             ['data2_admin ' , 'data2 ' , 'write ' ],
133+         ], Yii::$ app ->permission ->getPolicy ());
134+     }
135+ 
136+     public  function  testUpdatePolicies ()
137+     {
138+         $ this  ->assertEquals ([
139+             ['alice ' , 'data1 ' , 'read ' ],
140+             ['bob ' , 'data2 ' , 'write ' ],
141+             ['data2_admin ' , 'data2 ' , 'read ' ],
142+             ['data2_admin ' , 'data2 ' , 'write ' ],
143+         ], Yii::$ app ->permission ->getPolicy ());
144+ 
145+         $ oldPolicies  = [
146+             ['alice ' , 'data1 ' , 'read ' ],
147+             ['bob ' , 'data2 ' , 'write ' ]
148+         ];
149+         $ newPolicies  = [
150+             ['alice ' , 'data1 ' , 'write ' ],
151+             ['bob ' , 'data2 ' , 'read ' ]
152+         ];
153+ 
154+         Yii::$ app ->permission ->updatePolicies ($ oldPolicies , $ newPolicies );
155+ 
156+         $ this  ->assertEquals ([
157+             ['alice ' , 'data1 ' , 'write ' ],
158+             ['bob ' , 'data2 ' , 'read ' ],
159+             ['data2_admin ' , 'data2 ' , 'read ' ],
160+             ['data2_admin ' , 'data2 ' , 'write ' ],
161+         ], Yii::$ app ->permission ->getPolicy ());
162+     }
163+ 
164+     public  function  arrayEqualsWithoutOrder (array  $ expected , array  $ actual )
165+     {
166+         if  (method_exists ($ this  , 'assertEqualsCanonicalizing ' )) {
167+             $ this  ->assertEqualsCanonicalizing ($ expected , $ actual );
168+         } else  {
169+             array_multisort ($ expected );
170+             array_multisort ($ actual );
171+             $ this  ->assertEquals ($ expected , $ actual );
172+         }
173+     }
174+ 
175+     public  function  testUpdateFilteredPolicies ()
176+     {
177+         $ this  ->assertEquals ([
178+             ['alice ' , 'data1 ' , 'read ' ],
179+             ['bob ' , 'data2 ' , 'write ' ],
180+             ['data2_admin ' , 'data2 ' , 'read ' ],
181+             ['data2_admin ' , 'data2 ' , 'write ' ],
182+         ], Yii::$ app ->permission ->getPolicy ());
183+ 
184+         Yii::$ app ->permission ->updateFilteredPolicies ([["alice " , "data1 " , "write " ]], 0 , "alice " , "data1 " , "read " );
185+         Yii::$ app ->permission ->updateFilteredPolicies ([["bob " , "data2 " , "read " ]], 0 , "bob " , "data2 " , "write " );
186+ 
187+         $ policies  = [
188+             ['data2_admin ' , 'data2 ' , 'read ' ],
189+             ['data2_admin ' , 'data2 ' , 'write ' ],
190+             ['alice ' , 'data1 ' , 'write ' ],
191+             ['bob ' , 'data2 ' , 'read ' ],
192+         ];
193+         $ this  ->arrayEqualsWithoutOrder ($ policies , Yii::$ app ->permission ->getPolicy ());
194+ 
195+         // test use updateFilteredPolicies to update all policies of a user 
196+         $ this  ->initTable ();
197+         $ this  ->refreshApplication ();
198+ 
199+         $ policies  = [
200+             ['alice ' , 'data2 ' , 'write ' ],
201+             ['bob ' , 'data1 ' , 'read ' ]
202+         ];
203+ 
204+         Yii::$ app ->permission ->addPolicies ($ policies );
205+         $ this  ->arrayEqualsWithoutOrder ([
206+             ['alice ' , 'data1 ' , 'read ' ],
207+             ['bob ' , 'data2 ' , 'write ' ],
208+             ['data2_admin ' , 'data2 ' , 'read ' ],
209+             ['data2_admin ' , 'data2 ' , 'write ' ],
210+             ['alice ' , 'data2 ' , 'write ' ],
211+             ['bob ' , 'data1 ' , 'read ' ]
212+         ], Yii::$ app ->permission ->getPolicy ());
213+ 
214+         Yii::$ app ->permission ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['alice ' , 'data2 ' , 'read ' ]], 0 , 'alice ' );
215+         Yii::$ app ->permission ->updateFilteredPolicies ([['bob ' , 'data1 ' , 'write ' ], ["bob " , "data2 " , "read " ]], 0 , 'bob ' );
216+ 
217+         $ policies  = [
218+             ['alice ' , 'data1 ' , 'write ' ],
219+             ['alice ' , 'data2 ' , 'read ' ],
220+             ['bob ' , 'data1 ' , 'write ' ],
221+             ['bob ' , 'data2 ' , 'read ' ],
222+             ['data2_admin ' , 'data2 ' , 'read ' ],
223+             ['data2_admin ' , 'data2 ' , 'write ' ]
224+         ];
225+ 
226+         $ this  ->arrayEqualsWithoutOrder ($ policies , Yii::$ app ->permission ->getPolicy ());
227+ 
228+         // test if $fieldValues contains empty string 
229+         $ this  ->initTable ();
230+         $ this  ->refreshApplication ();
231+ 
232+         $ policies  = [
233+             ['alice ' , 'data2 ' , 'write ' ],
234+             ['bob ' , 'data1 ' , 'read ' ]
235+         ];
236+         Yii::$ app ->permission ->addPolicies ($ policies );
237+ 
238+         $ this  ->assertEquals ([
239+             ['alice ' , 'data1 ' , 'read ' ],
240+             ['bob ' , 'data2 ' , 'write ' ],
241+             ['data2_admin ' , 'data2 ' , 'read ' ],
242+             ['data2_admin ' , 'data2 ' , 'write ' ],
243+             ['alice ' , 'data2 ' , 'write ' ],
244+             ['bob ' , 'data1 ' , 'read ' ]
245+         ], Yii::$ app ->permission ->getPolicy ());
246+ 
247+         Yii::$ app ->permission ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'write ' ], ['alice ' , 'data2 ' , 'read ' ]], 0 , 'alice ' , '' , '' );
248+         Yii::$ app ->permission ->updateFilteredPolicies ([['bob ' , 'data1 ' , 'write ' ], ["bob " , "data2 " , "read " ]], 0 , 'bob ' , '' , '' );
249+ 
250+         $ policies  = [
251+             ['alice ' , 'data1 ' , 'write ' ],
252+             ['alice ' , 'data2 ' , 'read ' ],
253+             ['bob ' , 'data1 ' , 'write ' ],
254+             ['bob ' , 'data2 ' , 'read ' ],
255+             ['data2_admin ' , 'data2 ' , 'read ' ],
256+             ['data2_admin ' , 'data2 ' , 'write ' ]
257+         ];
258+ 
259+         $ this  ->arrayEqualsWithoutOrder ($ policies , Yii::$ app ->permission ->getPolicy ());
260+ 
261+         // test if $fieldIndex is not zero 
262+         $ this  ->initTable ();
263+         $ this  ->refreshApplication ();
264+ 
265+         $ policies  = [
266+             ['alice ' , 'data2 ' , 'write ' ],
267+             ['bob ' , 'data1 ' , 'read ' ]
268+         ];
269+         Yii::$ app ->permission ->addPolicies ($ policies );
270+ 
271+         $ this  ->assertEquals ([
272+             ['alice ' , 'data1 ' , 'read ' ],
273+             ['bob ' , 'data2 ' , 'write ' ],
274+             ['data2_admin ' , 'data2 ' , 'read ' ],
275+             ['data2_admin ' , 'data2 ' , 'write ' ],
276+             ['alice ' , 'data2 ' , 'write ' ],
277+             ['bob ' , 'data1 ' , 'read ' ]
278+         ], Yii::$ app ->permission ->getPolicy ());
279+ 
280+         Yii::$ app ->permission ->updateFilteredPolicies ([['alice ' , 'data1 ' , 'edit ' ], ['bob ' , 'data1 ' , 'edit ' ]], 2 , 'read ' );
281+         Yii::$ app ->permission ->updateFilteredPolicies ([['alice ' , 'data2 ' , 'read ' ], ["bob " , "data2 " , "read " ]], 2 , 'write ' );
282+ 
283+         $ policies  = [
284+             ['alice ' , 'data1 ' , 'edit ' ],
285+             ['alice ' , 'data2 ' , 'read ' ],
286+             ['bob ' , 'data1 ' , 'edit ' ],
287+             ['bob ' , 'data2 ' , 'read ' ],
288+         ];
289+ 
290+         $ this  ->arrayEqualsWithoutOrder ($ policies , Yii::$ app ->permission ->getPolicy ());
291+     }
292+ 
109293    public  function  testLoadFilteredPolicy ()
110294    {
111295        Yii::$ app ->permission ->clearPolicy ();
0 commit comments