Skip to content

Commit 2cc0555

Browse files
Metavirulenteleftherias
authored andcommitted
rename comparison method to isGranted and add test
1 parent a4ea989 commit 2cc0555

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public boolean isGranted(Acl acl, List<Permission> permission, List<Sid> sids,
8787

8888
for (AccessControlEntry ace : aces) {
8989

90-
if (comparePermissionMasks(ace, p)
90+
if (isGranted(ace, p)
9191
&& ace.getSid().equals(sid)) {
9292
// Found a matching ACE, so its authorization decision will
9393
// prevail
@@ -159,7 +159,7 @@ public boolean isGranted(Acl acl, List<Permission> permission, List<Sid> sids,
159159
* @param p the Permission we are checking against.
160160
* @return true, if the respective masks are considered to be equal.
161161
*/
162-
protected boolean comparePermissionMasks(AccessControlEntry ace, Permission p) {
162+
protected boolean isGranted(AccessControlEntry ace, Permission p) {
163163
return ace.getPermission().getMask() == p.getMask();
164164
}
165165

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public class AclImplTests {
4949
PermissionGrantingStrategy pgs;
5050
AuditLogger mockAuditLogger;
5151
ObjectIdentity objectIdentity = new ObjectIdentityImpl(TARGET_CLASS, 100);
52+
private DefaultPermissionFactory permissionFactory;
5253

5354
// ~ Methods
5455
// ========================================================================================================
@@ -60,6 +61,7 @@ public void setUp() {
6061
mockAuditLogger = mock(AuditLogger.class);
6162
pgs = new DefaultPermissionGrantingStrategy(mockAuditLogger);
6263
auth.setAuthenticated(true);
64+
permissionFactory = new DefaultPermissionFactory();
6365
}
6466

6567
@After
@@ -559,9 +561,39 @@ public void changingParentIsSuccessful() {
559561
childAcl.setParent(changeParentAcl);
560562
}
561563

564+
// SEC-2342
565+
@Test
566+
public void maskPermissionGrantingStrategy() {
567+
DefaultPermissionGrantingStrategy maskPgs = new MaskPermissionGrantingStrategy(mockAuditLogger);
568+
MockAclService service = new MockAclService();
569+
AclImpl acl = new AclImpl(objectIdentity, 1, authzStrategy, maskPgs, null, null,
570+
true, new PrincipalSid("joe"));
571+
Permission permission = permissionFactory.buildFromMask(BasePermission.READ.getMask() | BasePermission.WRITE.getMask());
572+
Sid sid = new PrincipalSid("ben");
573+
acl.insertAce(0, permission, sid, true);
574+
service.updateAcl(acl);
575+
List<Permission> permissions = Arrays.asList(BasePermission.READ);
576+
List<Sid> sids = Arrays.asList(sid);
577+
assertThat(acl.isGranted(permissions, sids, false)).isTrue();
578+
}
579+
562580
// ~ Inner Classes
563581
// ==================================================================================================
564582

583+
private static class MaskPermissionGrantingStrategy extends DefaultPermissionGrantingStrategy {
584+
public MaskPermissionGrantingStrategy(AuditLogger auditLogger) {
585+
super(auditLogger);
586+
}
587+
588+
@Override
589+
protected boolean isGranted(AccessControlEntry ace, Permission p) {
590+
if (p.getMask() != 0) {
591+
return (p.getMask() & ace.getPermission().getMask()) != 0;
592+
}
593+
return super.isGranted(ace, p);
594+
}
595+
}
596+
565597
private class MockAclService implements MutableAclService {
566598
public MutableAcl createAcl(ObjectIdentity objectIdentity)
567599
throws AlreadyExistsException {

0 commit comments

Comments
 (0)