@@ -502,25 +502,28 @@ private EnforceResult enforce(String matcher, Object... rvals) {
502
502
503
503
Effect [] policyEffects ;
504
504
float [] matcherResults ;
505
- int policyLen , explainIndex = -1 ;
506
- if ((policyLen = model .model .get ("p" ).get (pType ).policy .size ()) != 0 ) {
505
+ final List <List <String >> policy = model .model .get ("p" ).get (pType ).policy ;
506
+ final String [] pTokens = model .model .get ("p" ).get (pType ).tokens ;
507
+ final int policyLen = policy .size ();
508
+ int explainIndex = -1 ;
509
+
510
+ if (policyLen != 0 ) {
507
511
policyEffects = new Effect [policyLen ];
508
512
matcherResults = new float [policyLen ];
509
513
510
- for (int i = 0 ; i < model . model . get ( "p" ). get ( pType ). policy .size (); i ++) {
511
- List <String > pvals = model . model . get ( "p" ). get ( pType ). policy .get (i );
512
- if (model . model . get ( "p" ). get ( pType ). tokens .length != pvals .size ()) {
513
- throw new CasbinMatcherException ("invalid request size: expected " + model . model . get ( "p" ). get ( pType ). tokens .length +
514
+ for (int i = 0 ; i < policy .size (); i ++) {
515
+ List <String > pvals = policy .get (i );
516
+ if (pTokens .length != pvals .size ()) {
517
+ throw new CasbinMatcherException ("invalid request size: expected " + pTokens .length +
514
518
", got " + pvals .size () + ", rvals: " + Arrays .toString (rvals ));
515
519
}
516
520
517
521
// Util.logPrint("Policy Rule: " + pvals);
518
522
// Select the rule based on request size
519
- Map <String , Object > parameters = new HashMap <>();
523
+ Map <String , Object > parameters = new HashMap <>(rvals . length + pTokens . length );
520
524
getRTokens (parameters , rvals );
521
- for (int j = 0 ; j < model .model .get ("p" ).get (pType ).tokens .length ; j ++) {
522
- String token = model .model .get ("p" ).get (pType ).tokens [j ];
523
- parameters .put (token , pvals .get (j ));
525
+ for (int j = 0 ; j < pTokens .length ; j ++) {
526
+ parameters .put (pTokens [j ], pvals .get (j ));
524
527
}
525
528
526
529
Object result = expression .execute (parameters );
@@ -575,13 +578,13 @@ private EnforceResult enforce(String matcher, Object... rvals) {
575
578
policyEffects = new Effect [1 ];
576
579
matcherResults = new float [1 ];
577
580
578
- Map <String , Object > parameters = new HashMap <>();
579
- for (int j = 0 ; j < model .model .get ("r" ).get (rType ).tokens .length ; j ++) {
580
- String token = model .model .get ("r" ).get (rType ).tokens [j ];
581
- parameters .put (token , rvals [j ]);
581
+ String [] rTokens = model .model .get ("r" ).get (rType ).tokens ;
582
+ Map <String , Object > parameters = new HashMap <>(rTokens .length + pTokens .length );
583
+
584
+ for (int j = 0 ; j < rTokens .length ; j ++) {
585
+ parameters .put (rTokens [j ], rvals [j ]);
582
586
}
583
- for (int j = 0 ; j < model .model .get ("p" ).get (pType ).tokens .length ; j ++) {
584
- String token = model .model .get ("p" ).get (pType ).tokens [j ];
587
+ for (String token : pTokens ) {
585
588
parameters .put (token , "" );
586
589
}
587
590
@@ -613,7 +616,7 @@ private EnforceResult enforce(String matcher, Object... rvals) {
613
616
614
617
List <String > explain = new ArrayList <>();
615
618
if (explainIndex != -1 ) {
616
- explain .addAll (model . model . get ( "p" ). get ( pType ). policy .get (explainIndex ));
619
+ explain .addAll (policy .get (explainIndex ));
617
620
}
618
621
619
622
Util .logEnforce (rvals , result , explain );
@@ -705,15 +708,14 @@ public boolean addNamedDomainMatchingFunc(String ptype, String name, BiPredicate
705
708
}
706
709
707
710
private void getRTokens (Map <String , Object > parameters , Object ... rvals ) {
708
- for (String rKey : model .model .get ("r" ).keySet ()) {
709
- if (!(rvals .length == model . model . get ( "r" ). get ( rKey ) .tokens .length )) {
711
+ for (Assertion assertion : model .model .get ("r" ).values ()) {
712
+ if (!(rvals .length == assertion .tokens .length )) {
710
713
continue ;
711
714
}
712
- for (int j = 0 ; j < model . model . get ( "r" ). get ( rKey ) .tokens .length ; j ++) {
713
- String token = model . model . get ( "r" ). get ( rKey ) .tokens [j ];
715
+ for (int j = 0 ; j < assertion .tokens .length ; j ++) {
716
+ String token = assertion .tokens [j ];
714
717
parameters .put (token , rvals [j ]);
715
718
}
716
-
717
719
}
718
720
}
719
721
0 commit comments