@@ -246,3 +246,45 @@ def update_policies(
246246 """
247247 for i in range (len (old_rules )):
248248 self .update_policy (sec , ptype , old_rules [i ], new_rules [i ])
249+
250+ def update_filtered_policies (
251+ self , sec , ptype , new_rules : [[str ]], field_index , * field_values
252+ ) -> [[str ]]:
253+ """update_filtered_policies updates all the policies on the basis of the filter."""
254+
255+ filter = Filter ()
256+ filter .ptype = ptype
257+
258+ # Creating Filter from the field_index & field_values provided
259+ for i in range (len (field_values )):
260+ if field_index <= i and i < field_index + len (field_values ):
261+ setattr (filter , f"v{ i } " , field_values [i - field_index ])
262+ else :
263+ break
264+
265+ self ._update_filtered_policies (new_rules , filter )
266+
267+ def _update_filtered_policies (self , new_rules , filter ) -> [[str ]]:
268+ """_update_filtered_policies updates all the policies on the basis of the filter."""
269+
270+ with self ._session_scope () as session :
271+
272+ # Load old policies
273+
274+ query = session .query (self ._db_class ).filter (
275+ self ._db_class .ptype == filter .ptype
276+ )
277+ filtered_query = self .filter_query (query , filter )
278+ old_rules = filtered_query .all ()
279+
280+ # Delete old policies
281+
282+ self .remove_policies ("p" , filter .ptype , old_rules )
283+
284+ # Insert new policies
285+
286+ self .add_policies ("p" , filter .ptype , new_rules )
287+
288+ # return deleted rules
289+
290+ return old_rules
0 commit comments