File tree 5 files changed +21
-7
lines changed
5 files changed +21
-7
lines changed Original file line number Diff line number Diff line change 51
51
}
52
52
}
53
53
54
+ pub fn new_filtered_adapter ( p : P ) -> FileAdapter < P > {
55
+ FileAdapter {
56
+ file_path : p,
57
+ is_filtered : true ,
58
+ }
59
+ }
60
+
54
61
async fn load_policy_file (
55
- & self ,
62
+ & mut self ,
56
63
m : & mut dyn Model ,
57
64
handler : LoadPolicyFileHandler ,
58
65
) -> Result < ( ) > {
@@ -110,7 +117,8 @@ impl<P> Adapter for FileAdapter<P>
110
117
where
111
118
P : AsRef < Path > + Send + Sync ,
112
119
{
113
- async fn load_policy ( & self , m : & mut dyn Model ) -> Result < ( ) > {
120
+ async fn load_policy ( & mut self , m : & mut dyn Model ) -> Result < ( ) > {
121
+ self . is_filtered = false ;
114
122
self . load_policy_file ( m, load_policy_line) . await ?;
115
123
Ok ( ( ) )
116
124
}
Original file line number Diff line number Diff line change @@ -15,7 +15,8 @@ pub struct MemoryAdapter {
15
15
16
16
#[ async_trait]
17
17
impl Adapter for MemoryAdapter {
18
- async fn load_policy ( & self , m : & mut dyn Model ) -> Result < ( ) > {
18
+ async fn load_policy ( & mut self , m : & mut dyn Model ) -> Result < ( ) > {
19
+ self . is_filtered = false ;
19
20
for line in self . policy . iter ( ) {
20
21
let sec = & line[ 0 ] ;
21
22
let ptype = & line[ 1 ] ;
Original file line number Diff line number Diff line change @@ -20,7 +20,7 @@ pub struct Filter<'a> {
20
20
21
21
#[ async_trait]
22
22
pub trait Adapter : Send + Sync {
23
- async fn load_policy ( & self , m : & mut dyn Model ) -> Result < ( ) > ;
23
+ async fn load_policy ( & mut self , m : & mut dyn Model ) -> Result < ( ) > ;
24
24
async fn load_filtered_policy < ' a > (
25
25
& mut self ,
26
26
m : & mut dyn Model ,
Original file line number Diff line number Diff line change @@ -10,7 +10,7 @@ pub struct NullAdapter;
10
10
11
11
#[ async_trait]
12
12
impl Adapter for NullAdapter {
13
- async fn load_policy ( & self , _m : & mut dyn Model ) -> Result < ( ) > {
13
+ async fn load_policy ( & mut self , _m : & mut dyn Model ) -> Result < ( ) > {
14
14
Ok ( ( ) )
15
15
}
16
16
Original file line number Diff line number Diff line change @@ -416,7 +416,11 @@ impl CoreApi for Enforcer {
416
416
a : A ,
417
417
) -> Result < Self > {
418
418
let mut e = Self :: new_raw ( m, a) . await ?;
419
- e. load_policy ( ) . await ?;
419
+
420
+ // Do not initialize the full policy when using a filtered adapter
421
+ if !e. adapter . is_filtered ( ) {
422
+ e. load_policy ( ) . await ?;
423
+ }
420
424
Ok ( e)
421
425
}
422
426
@@ -1373,9 +1377,10 @@ mod tests {
1373
1377
tokio:: test
1374
1378
) ]
1375
1379
async fn test_filtered_file_adapter ( ) {
1380
+ let adapter = FileAdapter :: new_filtered_adapter ( "examples/rbac_with_domains_policy.csv" ) ;
1376
1381
let mut e = Enforcer :: new (
1377
1382
"examples/rbac_with_domains_model.conf" ,
1378
- "examples/rbac_with_domains_policy.csv" ,
1383
+ adapter
1379
1384
)
1380
1385
. await
1381
1386
. unwrap ( ) ;
You can’t perform that action at this time.
0 commit comments