@@ -55,35 +55,43 @@ public PermissionsCheckResult CheckPermissions(IPrincipal currentPrincipal, User
5555
5656 public PermissionsCheckResult CheckPermissionsOnBehalfOfAnyAccount ( User currentUser , TEntity entity )
5757 {
58- return CheckPermissionsOnBehalfOfAnyAccount ( currentUser , entity , out var accountsAllowedOnBehalfOf ) ;
58+ return CheckPermissionsOnBehalfOfAnyAccount ( currentUser , entity , exitEarly : true , accountsAllowedOnBehalfOf : out var _ ) ;
5959 }
6060
6161 public PermissionsCheckResult CheckPermissionsOnBehalfOfAnyAccount ( User currentUser , TEntity entity , out IEnumerable < User > accountsAllowedOnBehalfOf )
62+ {
63+ return CheckPermissionsOnBehalfOfAnyAccount ( currentUser , entity , exitEarly : false , accountsAllowedOnBehalfOf : out accountsAllowedOnBehalfOf ) ;
64+ }
65+
66+ private PermissionsCheckResult CheckPermissionsOnBehalfOfAnyAccount ( User currentUser , TEntity entity , bool exitEarly , out IEnumerable < User > accountsAllowedOnBehalfOf )
6267 {
6368 accountsAllowedOnBehalfOf = new List < User > ( ) ;
6469
65- var possibleAccountsOnBehalfOf =
66- new [ ] { currentUser }
67- . Concat ( GetOwners ( entity ) ) ;
70+ var possibleAccountsOnBehalfOf = new List < User >
71+ {
72+ currentUser
73+ } ;
74+
75+ possibleAccountsOnBehalfOf . AddRange ( GetOwners ( entity ) ) ;
6876
6977 if ( currentUser != null )
7078 {
71- possibleAccountsOnBehalfOf =
72- possibleAccountsOnBehalfOf
73- . Concat ( currentUser . Organizations . Select ( o => o . Organization ) ) ;
79+ possibleAccountsOnBehalfOf . AddRange ( currentUser . Organizations . Select ( o => o . Organization ) ) ;
7480 }
7581
76- possibleAccountsOnBehalfOf = possibleAccountsOnBehalfOf . Distinct ( new UserEqualityComparer ( ) ) ;
77-
7882 var aggregateResult = PermissionsCheckResult . Unknown ;
7983
80- foreach ( var accountOnBehalfOf in possibleAccountsOnBehalfOf )
84+ foreach ( var accountOnBehalfOf in possibleAccountsOnBehalfOf . Distinct ( new UserEqualityComparer ( ) ) )
8185 {
8286 var result = CheckPermissions ( currentUser , accountOnBehalfOf , entity ) ;
8387 aggregateResult = ChoosePermissionsCheckResult ( aggregateResult , result ) ;
8488 if ( result == PermissionsCheckResult . Allowed )
8589 {
8690 ( accountsAllowedOnBehalfOf as List < User > ) . Add ( accountOnBehalfOf ) ;
91+ if ( exitEarly )
92+ {
93+ break ;
94+ }
8795 }
8896 }
8997
@@ -115,4 +123,4 @@ private PermissionsCheckResult ChoosePermissionsCheckResult(PermissionsCheckResu
115123 return new [ ] { current , next } . Max ( ) ;
116124 }
117125 }
118- }
126+ }
0 commit comments