@@ -251,7 +251,7 @@ impl Adapter for SqlxAdapter {
251
251
field_index : usize ,
252
252
field_values : Vec < String > ,
253
253
) -> Result < bool > {
254
- if field_index <= 5 && !field_values. is_empty ( ) && field_values. len ( ) > field_index {
254
+ if field_index <= 5 && !field_values. is_empty ( ) && field_values. len ( ) + field_index <= 6 {
255
255
adapter:: remove_filtered_policy ( & self . pool , pt, field_index, field_values) . await
256
256
} else {
257
257
Ok ( false )
@@ -566,6 +566,56 @@ mod tests {
566
566
. unwrap( ) ) ;
567
567
assert_eq ! ( vec![ String :: new( ) ; 0 ] , e. get_roles_for_user( "carol" , None ) ) ;
568
568
569
+ // GitHub issue: https://github.com/casbin-rs/sqlx-adapter/pull/90
570
+ // add policies:
571
+ // p, alice_rfp, book_rfp, read_rfp
572
+ // p, bob_rfp, book_rfp, read_rfp
573
+ // p, bob_rfp, book_rfp, write_rfp
574
+ // p, alice_rfp, pen_rfp, get_rfp
575
+ // p, bob_rfp, pen_rfp, get_rfp
576
+ // p, alice_rfp, pencil_rfp, get_rfp
577
+ assert ! ( adapter
578
+ . add_policy( "" , "p" , to_owned( vec![ "alice_rfp" , "book_rfp" , "read_rfp" ] ) , )
579
+ . await
580
+ . is_ok( ) ) ;
581
+ assert ! ( adapter
582
+ . add_policy( "" , "p" , to_owned( vec![ "bob_rfp" , "book_rfp" , "read_rfp" ] ) , )
583
+ . await
584
+ . is_ok( ) ) ;
585
+ assert ! ( adapter
586
+ . add_policy( "" , "p" , to_owned( vec![ "bob_rfp" , "book_rfp" , "write_rfp" ] ) , )
587
+ . await
588
+ . is_ok( ) ) ;
589
+ assert ! ( adapter
590
+ . add_policy( "" , "p" , to_owned( vec![ "alice_rfp" , "pen_rfp" , "get_rfp" ] ) , )
591
+ . await
592
+ . is_ok( ) ) ;
593
+ assert ! ( adapter
594
+ . add_policy( "" , "p" , to_owned( vec![ "bob_rfp" , "pen_rfp" , "get_rfp" ] ) , )
595
+ . await
596
+ . is_ok( ) ) ;
597
+ assert ! ( adapter
598
+ . add_policy(
599
+ "" ,
600
+ "p" ,
601
+ to_owned( vec![ "alice_rfp" , "pencil_rfp" , "get_rfp" ] ) ,
602
+ )
603
+ . await
604
+ . is_ok( ) ) ;
605
+
606
+ // should remove (return true) all policies where "book_rfp" is in the second position
607
+ assert ! ( adapter
608
+ . remove_filtered_policy( "" , "p" , 1 , to_owned( vec![ "book_rfp" ] ) , )
609
+ . await
610
+ . unwrap( ) ) ;
611
+
612
+ // should remove (return true) all policies which match "alice_rfp" on first position
613
+ // and "get_rfp" on third position
614
+ assert ! ( adapter
615
+ . remove_filtered_policy( "" , "p" , 0 , to_owned( vec![ "alice_rfp" , "" , "get_rfp" ] ) , )
616
+ . await
617
+ . unwrap( ) ) ;
618
+
569
619
// shadow the previous enforcer
570
620
let mut e = Enforcer :: new (
571
621
"examples/rbac_with_domains_model.conf" ,
0 commit comments