@@ -55,7 +55,16 @@ def __init__(self, engine, db_class=None, filtered=False):
5555 if db_class is None :
5656 db_class = CasbinRule
5757 else :
58- for attr in ("ptype" , "v0" , "v1" , "v2" , "v3" , "v4" , "v5" ):
58+ for attr in (
59+ "id" ,
60+ "ptype" ,
61+ "v0" ,
62+ "v1" ,
63+ "v2" ,
64+ "v3" ,
65+ "v4" ,
66+ "v5" ,
67+ ): # id attr was used by filter
5968 if not hasattr (db_class , attr ):
6069 raise Exception (f"{ attr } not found in custom DatabaseClass." )
6170 Base .metadata = db_class .metadata
@@ -101,21 +110,12 @@ def load_filtered_policy(self, model, filter) -> None:
101110 self ._filtered = True
102111
103112 def filter_query (self , querydb , filter ):
104- if len (filter .ptype ) > 0 :
105- querydb = querydb .filter (CasbinRule .ptype .in_ (filter .ptype ))
106- if len (filter .v0 ) > 0 :
107- querydb = querydb .filter (CasbinRule .v0 .in_ (filter .v0 ))
108- if len (filter .v1 ) > 0 :
109- querydb = querydb .filter (CasbinRule .v1 .in_ (filter .v1 ))
110- if len (filter .v2 ) > 0 :
111- querydb = querydb .filter (CasbinRule .v2 .in_ (filter .v2 ))
112- if len (filter .v3 ) > 0 :
113- querydb = querydb .filter (CasbinRule .v3 .in_ (filter .v3 ))
114- if len (filter .v4 ) > 0 :
115- querydb = querydb .filter (CasbinRule .v4 .in_ (filter .v4 ))
116- if len (filter .v5 ) > 0 :
117- querydb = querydb .filter (CasbinRule .v5 .in_ (filter .v5 ))
118- return querydb .order_by (CasbinRule .id )
113+ for attr in ("ptype" , "v0" , "v1" , "v2" , "v3" , "v4" , "v5" ):
114+ if len (getattr (filter , attr )) > 0 :
115+ querydb = querydb .filter (
116+ getattr (self ._db_class , attr ).in_ (getattr (filter , attr ))
117+ )
118+ return querydb .order_by (self ._db_class .id )
119119
120120 def _save_policy_line (self , ptype , rule ):
121121 with self ._session_scope () as session :
0 commit comments