From: <fc...@us...> - 2008-02-20 15:30:19
|
Revision: 663 http://openutils.svn.sourceforge.net/openutils/?rev=663&view=rev Author: fcarone Date: 2008-02-20 07:30:24 -0800 (Wed, 20 Feb 2008) Log Message: ----------- After invocation handler based on security rules added Added Paths: ----------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java Added: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java (rev 0) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java 2008-02-20 15:30:24 UTC (rev 663) @@ -0,0 +1,71 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.hibernate.security.filter; + +import it.openutils.hibernate.security.services.SecurityRuleManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import org.acegisecurity.AccessDeniedException; +import org.acegisecurity.Authentication; +import org.acegisecurity.ConfigAttributeDefinition; +import org.acegisecurity.afterinvocation.AfterInvocationProvider; +import org.apache.commons.collections.CollectionUtils; + + +/** + * @author fcarone + * @version $Id: $ + */ +public class SecurityRuleAfterInvocationHandler extends SecurityRuleBaseHandler implements AfterInvocationProvider +{ + + private SecurityRuleManager securityRuleManager; + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + public Object decide(Authentication authentication, Object object, ConfigAttributeDefinition config, + Object returnedObject) throws AccessDeniedException + { + if (returnedObject == null) + { + return null; + } + SecurityRulePredicate predicate = new SecurityRulePredicate(authentication, config, securityRuleManager); + + if (returnedObject instanceof Collection) + { + CollectionUtils.filter((Collection) returnedObject, predicate); + } + else if (returnedObject.getClass().isArray()) + { + Object[] objectArray = (Object[]) returnedObject; + List<Object> objectArrayList = Arrays.asList(objectArray); + CollectionUtils.filter(objectArrayList, predicate); + } + else + { + if (!predicate.evaluate(returnedObject)) + { + throw new AccessDeniedException("Access denied"); + } + } + return returnedObject; + } + + /** + * Sets the securityRuleManager. + * @param securityRuleManager the securityRuleManager to set + */ + public void setSecurityRuleManager(SecurityRuleManager securityRuleManager) + { + this.securityRuleManager = securityRuleManager; + } + +} Added: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java (rev 0) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java 2008-02-20 15:30:24 UTC (rev 663) @@ -0,0 +1,68 @@ +/* + * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + */ +package it.openutils.hibernate.security.filter; + +import it.openutils.hibernate.security.dataobject.SecurityRule; +import it.openutils.hibernate.security.services.SecurityRuleManager; + +import java.util.List; + +import org.acegisecurity.Authentication; +import org.acegisecurity.ConfigAttributeDefinition; +import org.apache.commons.collections.Predicate; +import org.apache.commons.lang.StringUtils; +import org.hibernate.proxy.HibernateProxy; + + +/** + * @author fcarone + * @version $Id: $ + */ +public class SecurityRulePredicate implements Predicate +{ + + private Authentication authentication; + + private SecurityRuleManager securityRuleManager; + + private ConfigAttributeDefinition configAttribute; + + private SecurityRuleUtils ruleUtils = new SecurityRuleUtils(); + + /** + * @param authentication The current authentication + * @param configAttribute The config attribute of the current method invocation interceptor + * @param securityRuleManager The security rule manager to retrieve rules from + */ + public SecurityRulePredicate( + Authentication authentication, + ConfigAttributeDefinition configAttribute, + SecurityRuleManager securityRuleManager) + { + this.authentication = authentication; + this.securityRuleManager = securityRuleManager; + this.configAttribute = configAttribute; + } + + /** + * {@inheritDoc} + * If we return false here, the element will be removed from the original collection. + */ + @SuppressWarnings("unchecked") + public boolean evaluate(Object object) + { + List<String> roles = ruleUtils.getRolesFromAuthentication(authentication); + List<SecurityRule> rules = securityRuleManager.getRulesForRoles(ruleUtils.getClassName(object), roles); + + // @todo: this should be configurable + // denyAll by default + if (rules == null || rules.isEmpty()) + { + return false; + } + return (ruleUtils.checkRules(rules, object) && ruleUtils.checkPermissions(rules, configAttribute)); + } + + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fc...@us...> - 2008-02-20 15:55:52
|
Revision: 667 http://openutils.svn.sourceforge.net/openutils/?rev=667&view=rev Author: fcarone Date: 2008-02-20 07:55:57 -0800 (Wed, 20 Feb 2008) Log Message: ----------- Various enhancements Modified Paths: -------------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleUtils.java Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java 2008-02-20 15:36:56 UTC (rev 666) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java 2008-02-20 15:55:57 UTC (rev 667) @@ -5,7 +5,6 @@ import it.openutils.hibernate.security.services.SecurityRuleManager; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java 2008-02-20 15:36:56 UTC (rev 666) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java 2008-02-20 15:55:57 UTC (rev 667) @@ -11,8 +11,6 @@ import org.acegisecurity.Authentication; import org.acegisecurity.ConfigAttributeDefinition; import org.apache.commons.collections.Predicate; -import org.apache.commons.lang.StringUtils; -import org.hibernate.proxy.HibernateProxy; /** @@ -61,7 +59,7 @@ { return false; } - return (ruleUtils.checkRules(rules, object) && ruleUtils.checkPermissions(rules, configAttribute)); + return (ruleUtils.checkPermissions(rules, configAttribute) && ruleUtils.checkRules(rules, object)); } Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleUtils.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleUtils.java 2008-02-20 15:36:56 UTC (rev 666) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleUtils.java 2008-02-20 15:55:57 UTC (rev 667) @@ -82,13 +82,14 @@ log.debug("Matching rule found: {}", rule); return true; } - + break; case NOT: if (!StringUtils.equals(objProperty, rule.getValue())) { log.debug("Matching rule found: {}", rule); return true; } + break; default: throw new RuntimeException("Modifier " + rule.getModifier() + " is not recognized"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fc...@us...> - 2008-02-25 09:23:21
|
Revision: 690 http://openutils.svn.sourceforge.net/openutils/?rev=690&view=rev Author: fcarone Date: 2008-02-25 01:23:12 -0800 (Mon, 25 Feb 2008) Log Message: ----------- new config variable for denyIfNoRulesFound added Modified Paths: -------------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java 2008-02-25 09:19:55 UTC (rev 689) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java 2008-02-25 09:23:12 UTC (rev 690) @@ -36,6 +36,7 @@ { private SecurityRuleManager securityRuleManager; + private boolean denyIfNoRulesFound = true; /** * {@inheritDoc} @@ -49,6 +50,7 @@ return null; } SecurityRulePredicate predicate = new SecurityRulePredicate(authentication, config, securityRuleManager); + predicate.setDenyIfNoRulesFound(denyIfNoRulesFound ); if (returnedObject instanceof Collection) { @@ -76,4 +78,14 @@ this.securityRuleManager = securityRuleManager; } + + /** + * Sets the denyIfNoRulesFound. + * @param denyIfNoRulesFound the denyIfNoRulesFound to set + */ + public void setDenyIfNoRulesFound(boolean denyIfNoRulesFound) + { + this.denyIfNoRulesFound = denyIfNoRulesFound; + } + } Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java 2008-02-25 09:19:55 UTC (rev 689) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java 2008-02-25 09:23:12 UTC (rev 690) @@ -1,5 +1,17 @@ /* - * Copyright (c) Openmind. All rights reserved. http://www.openmindonline.it + * Copyright Openmind http://www.openmindonline.it + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package it.openutils.hibernate.security.filter; @@ -31,6 +43,8 @@ private SecurityRuleUtils ruleUtils = new SecurityRuleUtils(); + private boolean denyIfNoRulesFound = true; + /** * @param authentication The current authentication * @param configAttribute The config attribute of the current method invocation interceptor @@ -59,13 +73,19 @@ // denyAll by default if (rules == null || rules.isEmpty()) { - return false; + if (denyIfNoRulesFound ) + { + return false; + } + else + { + return true; + } } return (ruleUtils.checkPermissions(rules, configAttribute) && ruleUtils.checkRules(rules, object)); } @SuppressWarnings("unchecked") - // @todo: needs unit test methods private List<SecurityRule> findAllRules(Object object, List<String> roles) { List<SecurityRule> result = new ArrayList<SecurityRule>(); @@ -82,4 +102,14 @@ return result; } + + /** + * Sets the denyIfNoRulesFound. + * @param denyIfNoRulesFound the denyIfNoRulesFound to set + */ + public void setDenyIfNoRulesFound(boolean denyIfNoRulesFound) + { + this.denyIfNoRulesFound = denyIfNoRulesFound; + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fc...@us...> - 2008-02-26 10:10:45
|
Revision: 702 http://openutils.svn.sourceforge.net/openutils/?rev=702&view=rev Author: fcarone Date: 2008-02-26 02:10:35 -0800 (Tue, 26 Feb 2008) Log Message: ----------- More logging and enable/disable added to all logic pieces. Modified Paths: -------------- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java 2008-02-25 17:45:22 UTC (rev 701) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAccessDecisionVoter.java 2008-02-26 10:10:35 UTC (rev 702) @@ -49,11 +49,18 @@ private SecurityRuleUtils ruleUtils = new SecurityRuleUtils(); + private boolean enabled = true; + /** * {@inheritDoc} */ public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config) { + if (!enabled) + { + log.debug("SecurityRuleAccessDecisionVoter disabled, abstaining."); + return ACCESS_ABSTAIN; + } List<String> roles = ruleUtils.getRolesFromAuthentication(authentication); if (object instanceof ReflectiveMethodInvocation) @@ -69,12 +76,14 @@ } if (ruleUtils.checkPermissions(rules, config) && ruleUtils.checkRules(rules, argument)) { + log.debug("Granting access."); return ACCESS_GRANTED; } + log.debug("Denying access."); return ACCESS_DENIED; } } - + log.debug("No rules found, abstaining."); return ACCESS_ABSTAIN; } @@ -86,4 +95,14 @@ { this.securityRuleManager = securityRuleManager; } + + + /** + * Sets the enabled. + * @param enabled the enabled to set + */ + public void setEnabled(boolean enabled) + { + this.enabled = enabled; + } } Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java 2008-02-25 17:45:22 UTC (rev 701) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRuleAfterInvocationHandler.java 2008-02-26 10:10:35 UTC (rev 702) @@ -26,6 +26,8 @@ import org.acegisecurity.ConfigAttributeDefinition; import org.acegisecurity.afterinvocation.AfterInvocationProvider; import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -35,9 +37,17 @@ public class SecurityRuleAfterInvocationHandler extends SecurityRuleBaseHandler implements AfterInvocationProvider { + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(SecurityRuleAfterInvocationHandler.class); + private SecurityRuleManager securityRuleManager; + private boolean denyIfNoRulesFound = true; + private boolean enabled = true; + /** * {@inheritDoc} */ @@ -45,12 +55,17 @@ public Object decide(Authentication authentication, Object object, ConfigAttributeDefinition config, Object returnedObject) throws AccessDeniedException { + if (!enabled) + { + log.debug("SecurityRuleAfterInvocationHandler disabled, returning."); + return returnedObject; + } if (returnedObject == null) { return null; } SecurityRulePredicate predicate = new SecurityRulePredicate(authentication, config, securityRuleManager); - predicate.setDenyIfNoRulesFound(denyIfNoRulesFound ); + predicate.setDenyIfNoRulesFound(denyIfNoRulesFound); if (returnedObject instanceof Collection) { @@ -78,7 +93,6 @@ this.securityRuleManager = securityRuleManager; } - /** * Sets the denyIfNoRulesFound. * @param denyIfNoRulesFound the denyIfNoRulesFound to set @@ -88,4 +102,13 @@ this.denyIfNoRulesFound = denyIfNoRulesFound; } + /** + * Sets the enabled. + * @param enabled the enabled to set + */ + public void setEnabled(boolean enabled) + { + this.enabled = enabled; + } + } Modified: trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java =================================================================== --- trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java 2008-02-25 17:45:22 UTC (rev 701) +++ trunk/openutils-hibernate-security/src/main/java/it/openutils/hibernate/security/filter/SecurityRulePredicate.java 2008-02-26 10:10:35 UTC (rev 702) @@ -26,6 +26,8 @@ import org.acegisecurity.ConfigAttributeDefinition; import org.apache.commons.collections.Predicate; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -35,6 +37,11 @@ public class SecurityRulePredicate implements Predicate { + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(SecurityRulePredicate.class); + private Authentication authentication; private SecurityRuleManager securityRuleManager; @@ -69,19 +76,18 @@ List<String> roles = ruleUtils.getRolesFromAuthentication(authentication); List<SecurityRule> rules = findAllRules(object, roles); - // @todo: this should be configurable - // denyAll by default if (rules == null || rules.isEmpty()) { - if (denyIfNoRulesFound ) + if (denyIfNoRulesFound) { + log.debug("Returning false since no rules found and denyIfNoRulesFound is true."); return false; } - else - { - return true; - } + log.debug("Returning true since no rules found and denyIfNoRulesFound is false."); + return true; + } + log.debug("Evaluating rules."); return (ruleUtils.checkPermissions(rules, configAttribute) && ruleUtils.checkRules(rules, object)); } @@ -102,7 +108,6 @@ return result; } - /** * Sets the denyIfNoRulesFound. * @param denyIfNoRulesFound the denyIfNoRulesFound to set This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |