@@ -55,7 +55,16 @@ def __init__(self, engine, db_class=None, filtered=False):
55
55
if db_class is None :
56
56
db_class = CasbinRule
57
57
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
59
68
if not hasattr (db_class , attr ):
60
69
raise Exception (f"{ attr } not found in custom DatabaseClass." )
61
70
Base .metadata = db_class .metadata
@@ -101,21 +110,12 @@ def load_filtered_policy(self, model, filter) -> None:
101
110
self ._filtered = True
102
111
103
112
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 )
119
119
120
120
def _save_policy_line (self , ptype , rule ):
121
121
with self ._session_scope () as session :
0 commit comments