Skip to content

Commit efb394d

Browse files
bbertojgrandja
authored andcommitted
Allow ACL to be owned by GrantedAuthoritySid
Closes gh-9425
1 parent 92b3a7b commit efb394d

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

acl/src/main/java/org/springframework/security/acls/domain/AclAuthorizationStrategyImpl.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,17 @@ public void securityCheck(Acl acl, int changeType) {
9393
&& ((changeType == CHANGE_GENERAL) || (changeType == CHANGE_OWNERSHIP))) {
9494
return;
9595
}
96-
// Not authorized by ACL ownership; try via adminstrative permissions
97-
GrantedAuthority requiredAuthority = getRequiredAuthority(changeType);
9896

9997
// Iterate this principal's authorities to determine right
10098
Set<String> authorities = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
99+
if (acl.getOwner() instanceof GrantedAuthoritySid
100+
&& authorities.contains(((GrantedAuthoritySid) acl.getOwner()).getGrantedAuthority())) {
101+
return;
102+
}
103+
104+
// Not authorized by ACL ownership; try via adminstrative permissions
105+
GrantedAuthority requiredAuthority = getRequiredAuthority(changeType);
106+
101107
if (authorities.contains(requiredAuthority.getAuthority())) {
102108
return;
103109
}

acl/src/test/java/org/springframework/security/acls/domain/AclAuthorizationStrategyImplTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.springframework.security.core.authority.SimpleGrantedAuthority;
3232
import org.springframework.security.core.context.SecurityContextHolder;
3333

34+
import static org.mockito.BDDMockito.given;
35+
3436
/**
3537
* @author Rob Winch
3638
*
@@ -66,6 +68,14 @@ public void securityCheckWhenCustomAuthorityThenNameIsUsed() {
6668
this.strategy.securityCheck(this.acl, AclAuthorizationStrategy.CHANGE_GENERAL);
6769
}
6870

71+
// gh-9425
72+
@Test
73+
public void securityCheckWhenAclOwnedByGrantedAuthority() {
74+
given(this.acl.getOwner()).willReturn(new GrantedAuthoritySid("ROLE_AUTH"));
75+
this.strategy = new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("ROLE_SYSTEM_ADMIN"));
76+
this.strategy.securityCheck(this.acl, AclAuthorizationStrategy.CHANGE_GENERAL);
77+
}
78+
6979
@SuppressWarnings("serial")
7080
class CustomAuthority implements GrantedAuthority {
7181

0 commit comments

Comments
 (0)