@@ -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