Author: adrianc
Date: Wed Oct 9 00:50:22 2013 New Revision: 1530471 URL: http://svn.apache.org/r1530471 Log: Some work on the Security component: 1. Some code cleanup and optimization in OFBizSecurity.java. We can use the entity condition cache now that the cache has been fixed. 2. Added @Override annotations to methods that implement the interface. 3. Flagged some Security interface methods as deprecated because they are implementation-specific. If the idea is to have a pluggable Security implementation, then the interface should not reference the entity-engine-based implementation - because a replacement implementation might not use the entity engine. Modified: ofbiz/trunk/framework/security/src/org/ofbiz/security/OFBizSecurity.java ofbiz/trunk/framework/security/src/org/ofbiz/security/Security.java ofbiz/trunk/framework/security/src/org/ofbiz/security/SecurityFactory.java Modified: ofbiz/trunk/framework/security/src/org/ofbiz/security/OFBizSecurity.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/security/src/org/ofbiz/security/OFBizSecurity.java?rev=1530471&r1=1530470&r2=1530471&view=diff ============================================================================== --- ofbiz/trunk/framework/security/src/org/ofbiz/security/OFBizSecurity.java (original) +++ ofbiz/trunk/framework/security/src/org/ofbiz/security/OFBizSecurity.java Wed Oct 9 00:50:22 2013 @@ -19,14 +19,13 @@ package org.ofbiz.security; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.servlet.http.HttpSession; -import javolution.util.FastList; - import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilMisc; import org.ofbiz.base.util.UtilValidate; @@ -43,6 +42,7 @@ import org.ofbiz.entity.util.EntityUtil; * An implementation of the Security interface that uses the OFBiz database * for permission storage. */ +@SuppressWarnings("deprecation") public class OFBizSecurity implements Security { public static final String module = OFBizSecurity.class.getName(); @@ -60,48 +60,38 @@ public class OFBizSecurity implements Se this.delegator = delegator; } + @Override public Delegator getDelegator() { return this.delegator; } + @Override public void setDelegator(Delegator delegator) { this.delegator = delegator; } - /** - * @see org.ofbiz.security.Security#findUserLoginSecurityGroupByUserLoginId(java.lang.String) - */ + @Override public Iterator<GenericValue> findUserLoginSecurityGroupByUserLoginId(String userLoginId) { - List<GenericValue> collection; try { - collection = delegator.findByAnd("UserLoginSecurityGroup", UtilMisc.toMap("userLoginId", userLoginId), null, false); + List<GenericValue> collection = EntityUtil.filterByDate(delegator.findByAnd("UserLoginSecurityGroup", UtilMisc.toMap("userLoginId", userLoginId), null, true)); + return collection.iterator(); } catch (GenericEntityException e) { - // make an empty collection to speed up the case where a userLogin belongs to no security groups, only with no exception of course - collection = FastList.newInstance(); Debug.logWarning(e, module); + return Collections.<GenericValue>emptyList().iterator(); } - // filter each time after cache retreival, ie cache will contain entire list - collection = EntityUtil.filterByDate(collection, true); - return collection.iterator(); } - /** - * @see org.ofbiz.security.Security#securityGroupPermissionExists(java.lang.String, java.lang.String) - */ + @Override public boolean securityGroupPermissionExists(String groupId, String permission) { - GenericValue securityGroupPermissionValue = delegator.makeValue("SecurityGroupPermission", - UtilMisc.toMap("groupId", groupId, "permissionId", permission)); try { - return delegator.findOne(securityGroupPermissionValue.getEntityName(), securityGroupPermissionValue, false) != null; + return delegator.findOne("SecurityGroupPermission", UtilMisc.toMap("groupId", groupId, "permissionId", permission), true) != null; } catch (GenericEntityException e) { Debug.logWarning(e, module); return false; } } - /** - * @see org.ofbiz.security.Security#hasPermission(java.lang.String, javax.servlet.http.HttpSession) - */ + @Override public boolean hasPermission(String permission, HttpSession session) { GenericValue userLogin = (GenericValue) session.getAttribute("userLogin"); @@ -110,9 +100,7 @@ public class OFBizSecurity implements Se return hasPermission(permission, userLogin); } - /** - * @see org.ofbiz.security.Security#hasPermission(java.lang.String, org.ofbiz.entity.GenericValue) - */ + @Override public boolean hasPermission(String permission, GenericValue userLogin) { if (userLogin == null) return false; @@ -127,9 +115,7 @@ public class OFBizSecurity implements Se return false; } - /** - * @see org.ofbiz.security.Security#hasEntityPermission(java.lang.String, java.lang.String, javax.servlet.http.HttpSession) - */ + @Override public boolean hasEntityPermission(String entity, String action, HttpSession session) { if (session == null) { return false; @@ -141,11 +127,11 @@ public class OFBizSecurity implements Se return hasEntityPermission(entity, action, userLogin); } - /** - * @see org.ofbiz.security.Security#hasEntityPermission(java.lang.String, java.lang.String, org.ofbiz.entity.GenericValue) - */ + @Override public boolean hasEntityPermission(String entity, String action, GenericValue userLogin) { if (userLogin == null) return false; + String permission = entity.concat(action); + String adminPermission = entity.concat("_ADMIN"); // if (Debug.infoOn()) Debug.logInfo("hasEntityPermission: entity=" + entity + ", action=" + action, module); Iterator<GenericValue> iterator = findUserLoginSecurityGroupByUserLoginId(userLogin.getString("userLoginId")); @@ -153,30 +139,22 @@ public class OFBizSecurity implements Se while (iterator.hasNext()) { userLoginSecurityGroup = iterator.next(); - - // if (Debug.infoOn()) Debug.logInfo("hasEntityPermission: userLoginSecurityGroup=" + userLoginSecurityGroup.toString(), module); - - // always try _ADMIN first so that it will cache first, keeping the cache smaller - if (securityGroupPermissionExists(userLoginSecurityGroup.getString("groupId"), entity + "_ADMIN")) + if (securityGroupPermissionExists(userLoginSecurityGroup.getString("groupId"), permission)) return true; - if (securityGroupPermissionExists(userLoginSecurityGroup.getString("groupId"), entity + action)) + if (securityGroupPermissionExists(userLoginSecurityGroup.getString("groupId"), adminPermission)) return true; } return false; } - /** - * @see org.ofbiz.security.Security#hasRolePermission(java.lang.String, java.lang.String, java.lang.String, java.lang.String, javax.servlet.http.HttpSession) - */ + @Override public boolean hasRolePermission(String application, String action, String primaryKey, String role, HttpSession session) { GenericValue userLogin = (GenericValue) session.getAttribute("userLogin"); return hasRolePermission(application, action, primaryKey, role, userLogin); } - /** - * @see org.ofbiz.security.Security#hasRolePermission(java.lang.String, java.lang.String, java.lang.String, java.lang.String, org.ofbiz.entity.GenericValue) - */ + @Override public boolean hasRolePermission(String application, String action, String primaryKey, String role, GenericValue userLogin) { List<String> roles = null; if (role != null && !role.equals("")) @@ -184,17 +162,13 @@ public class OFBizSecurity implements Se return hasRolePermission(application, action, primaryKey, roles, userLogin); } - /** - * @see org.ofbiz.security.Security#hasRolePermission(java.lang.String, java.lang.String, java.lang.String, java.util.List, javax.servlet.http.HttpSession) - */ + @Override public boolean hasRolePermission(String application, String action, String primaryKey, List<String> roles, HttpSession session) { GenericValue userLogin = (GenericValue) session.getAttribute("userLogin"); return hasRolePermission(application, action, primaryKey, roles, userLogin); } - /** - * @see org.ofbiz.security.Security#hasRolePermission(java.lang.String, java.lang.String, java.lang.String, java.util.List, org.ofbiz.entity.GenericValue) - */ + @Override public boolean hasRolePermission(String application, String action, String primaryKey, List<String> roles, GenericValue userLogin) { String entityName = null; EntityCondition condition = null; @@ -240,7 +214,7 @@ public class OFBizSecurity implements Se * @param userLogin The userLogin object for user to check against. * @return Returns true if the currently logged in userLogin has the specified permission, otherwise returns false. */ - public boolean hasRolePermission(String application, String action, String entityName, EntityCondition condition, GenericValue userLogin) { + private boolean hasRolePermission(String application, String action, String entityName, EntityCondition condition, GenericValue userLogin) { if (userLogin == null) return false; // first check the standard permission @@ -269,6 +243,7 @@ public class OFBizSecurity implements Se return false; } + @Override public void clearUserData(GenericValue userLogin) { if (userLogin != null) { delegator.getCache().remove("UserLoginSecurityGroup", EntityCondition.makeCondition("userLoginId", EntityOperator.EQUALS, userLogin.getString("userLoginId"))); Modified: ofbiz/trunk/framework/security/src/org/ofbiz/security/Security.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/security/src/org/ofbiz/security/Security.java?rev=1530471&r1=1530470&r2=1530471&view=diff ============================================================================== --- ofbiz/trunk/framework/security/src/org/ofbiz/security/Security.java (original) +++ ofbiz/trunk/framework/security/src/org/ofbiz/security/Security.java Wed Oct 9 00:50:22 2013 @@ -27,12 +27,22 @@ import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericValue; /** - * Security interface. This interface defines security-related methods. + * Security interface. This interface defines authorization-related methods. */ public interface Security { + /** + * + * @deprecated No replacement. + */ + @Deprecated public Delegator getDelegator(); + /** + * + * @deprecated No replacement. + */ + @Deprecated public void setDelegator(Delegator delegator); /** @@ -41,7 +51,10 @@ public interface Security { * @param userLoginId The userLoginId to find security groups by * @return An iterator made from the Collection either cached or retrieved from the database through the * UserLoginSecurityGroup Delegator. + * + * @deprecated No replacement. */ + @Deprecated public Iterator<GenericValue> findUserLoginSecurityGroupByUserLoginId(String userLoginId); /** @@ -52,7 +65,10 @@ public interface Security { * @param groupId The ID of the group * @param permission The name of the permission * @return boolean specifying whether or not a SecurityGroupPermission row exists + * + * @deprecated No replacement. */ + @Deprecated public boolean securityGroupPermissionExists(String groupId, String permission); /** Modified: ofbiz/trunk/framework/security/src/org/ofbiz/security/SecurityFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/security/src/org/ofbiz/security/SecurityFactory.java?rev=1530471&r1=1530470&r2=1530471&view=diff ============================================================================== --- ofbiz/trunk/framework/security/src/org/ofbiz/security/SecurityFactory.java (original) +++ ofbiz/trunk/framework/security/src/org/ofbiz/security/SecurityFactory.java Wed Oct 9 00:50:22 2013 @@ -51,6 +51,7 @@ public final class SecurityFactory { * @param delegator the generic delegator * @return instance of security implementation (default: OFBizSecurity) */ + @SuppressWarnings("deprecation") public static Security getInstance(Delegator delegator) throws SecurityConfigurationException { Security security = null; String securityClassName = DEFAULT_SECURITY_CLASS_NAME; |
Free forum by Nabble | Edit this page |