|
@@ -1,4 +1,4 @@
|
|
|
-/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
|
|
+/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
|
|
*
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
* you may not use this file except in compliance with the License.
|
|
@@ -19,6 +19,7 @@ import org.acegisecurity.Authentication;
|
|
|
import org.acegisecurity.AuthorizationServiceException;
|
|
|
import org.acegisecurity.ConfigAttribute;
|
|
|
import org.acegisecurity.ConfigAttributeDefinition;
|
|
|
+
|
|
|
import org.acegisecurity.acl.AclEntry;
|
|
|
import org.acegisecurity.acl.AclManager;
|
|
|
import org.acegisecurity.acl.basic.BasicAclEntry;
|
|
@@ -48,8 +49,7 @@ import java.util.Iterator;
|
|
|
* <code>Authentication</code> object. This class is designed to process
|
|
|
* {@link AclEntry}s that are subclasses of {@link
|
|
|
* org.acegisecurity.acl.basic.BasicAclEntry} only. Generally these are
|
|
|
- * obtained by using the {@link
|
|
|
- * org.acegisecurity.acl.basic.BasicAclProvider}.
|
|
|
+ * obtained by using the {@link org.acegisecurity.acl.basic.BasicAclProvider}.
|
|
|
* </p>
|
|
|
*
|
|
|
* <p>
|
|
@@ -139,18 +139,21 @@ public class BasicAclEntryVoter extends AbstractAclVoter
|
|
|
|
|
|
//~ Methods ================================================================
|
|
|
|
|
|
- public void setAclManager(AclManager aclManager) {
|
|
|
- this.aclManager = aclManager;
|
|
|
+ public void afterPropertiesSet() throws Exception {
|
|
|
+ Assert.notNull(processConfigAttribute,
|
|
|
+ "A processConfigAttribute is mandatory");
|
|
|
+ Assert.notNull(aclManager, "An aclManager is mandatory");
|
|
|
+
|
|
|
+ if ((requirePermission == null) || (requirePermission.length == 0)) {
|
|
|
+ throw new IllegalArgumentException(
|
|
|
+ "One or more requirePermission entries is mandatory");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public AclManager getAclManager() {
|
|
|
return aclManager;
|
|
|
}
|
|
|
|
|
|
- public void setInternalMethod(String internalMethod) {
|
|
|
- this.internalMethod = internalMethod;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* Optionally specifies a method of the domain object that will be used to
|
|
|
* obtain a contained domain object. That contained domain object will be
|
|
@@ -168,31 +171,28 @@ public class BasicAclEntryVoter extends AbstractAclVoter
|
|
|
return internalMethod;
|
|
|
}
|
|
|
|
|
|
- public void setProcessConfigAttribute(String processConfigAttribute) {
|
|
|
- this.processConfigAttribute = processConfigAttribute;
|
|
|
- }
|
|
|
-
|
|
|
public String getProcessConfigAttribute() {
|
|
|
return processConfigAttribute;
|
|
|
}
|
|
|
|
|
|
- public void setRequirePermission(int[] requirePermission) {
|
|
|
- this.requirePermission = requirePermission;
|
|
|
- }
|
|
|
-
|
|
|
public int[] getRequirePermission() {
|
|
|
return requirePermission;
|
|
|
}
|
|
|
|
|
|
- public void afterPropertiesSet() throws Exception {
|
|
|
- Assert.notNull(processConfigAttribute,
|
|
|
- "A processConfigAttribute is mandatory");
|
|
|
- Assert.notNull(aclManager, "An aclManager is mandatory");
|
|
|
+ public void setAclManager(AclManager aclManager) {
|
|
|
+ this.aclManager = aclManager;
|
|
|
+ }
|
|
|
|
|
|
- if ((requirePermission == null) || (requirePermission.length == 0)) {
|
|
|
- throw new IllegalArgumentException(
|
|
|
- "One or more requirePermission entries is mandatory");
|
|
|
- }
|
|
|
+ public void setInternalMethod(String internalMethod) {
|
|
|
+ this.internalMethod = internalMethod;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setProcessConfigAttribute(String processConfigAttribute) {
|
|
|
+ this.processConfigAttribute = processConfigAttribute;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setRequirePermission(int[] requirePermission) {
|
|
|
+ this.requirePermission = requirePermission;
|
|
|
}
|
|
|
|
|
|
public boolean supports(ConfigAttribute attribute) {
|
|
@@ -218,6 +218,10 @@ public class BasicAclEntryVoter extends AbstractAclVoter
|
|
|
|
|
|
// If domain object is null, vote to abstain
|
|
|
if (domainObject == null) {
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
+ logger.debug("Voting to abstain - domainObject is null");
|
|
|
+ }
|
|
|
+
|
|
|
return AccessDecisionVoter.ACCESS_ABSTAIN;
|
|
|
}
|
|
|
|
|
@@ -271,6 +275,11 @@ public class BasicAclEntryVoter extends AbstractAclVoter
|
|
|
|
|
|
// If principal has no permissions for domain object, deny
|
|
|
if ((acls == null) || (acls.length == 0)) {
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
+ logger.debug(
|
|
|
+ "Voting to deny access - no ACLs returned for this principal");
|
|
|
+ }
|
|
|
+
|
|
|
return AccessDecisionVoter.ACCESS_DENIED;
|
|
|
}
|
|
|
|
|
@@ -283,6 +292,10 @@ public class BasicAclEntryVoter extends AbstractAclVoter
|
|
|
// See if principal has any of the required permissions
|
|
|
for (int y = 0; y < requirePermission.length; y++) {
|
|
|
if (processableAcl.isPermitted(requirePermission[y])) {
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
+ logger.debug("Voting to grant access");
|
|
|
+ }
|
|
|
+
|
|
|
return AccessDecisionVoter.ACCESS_GRANTED;
|
|
|
}
|
|
|
}
|
|
@@ -290,6 +303,11 @@ public class BasicAclEntryVoter extends AbstractAclVoter
|
|
|
}
|
|
|
|
|
|
// No permissions match
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
+ logger.debug(
|
|
|
+ "Voting to deny access - ACLs returned, but insufficient permissions for this principal");
|
|
|
+ }
|
|
|
+
|
|
|
return AccessDecisionVoter.ACCESS_DENIED;
|
|
|
}
|
|
|
}
|