@@ -106,6 +106,190 @@ public function testRemoveFilteredPolicy()
106
106
$ this ->assertFalse (Yii::$ app ->permission ->enforce ('alice ' , 'data2 ' , 'write ' ));
107
107
}
108
108
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
+
109
293
public function testLoadFilteredPolicy ()
110
294
{
111
295
Yii::$ app ->permission ->clearPolicy ();
0 commit comments