1 25 package org.ofbiz.content.content; 26 27 import java.util.ArrayList ; 28 import java.util.HashMap ; 29 import java.util.List ; 30 import java.util.Map ; 31 32 import org.ofbiz.base.util.Debug; 33 import org.ofbiz.base.util.StringUtil; 34 import org.ofbiz.base.util.UtilMisc; 35 import org.ofbiz.base.util.UtilValidate; 36 import org.ofbiz.entity.GenericDelegator; 37 import org.ofbiz.entity.GenericEntityException; 38 import org.ofbiz.entity.GenericValue; 39 import org.ofbiz.entityext.permission.EntityPermissionChecker; 40 import org.ofbiz.security.Security; 41 import org.ofbiz.service.DispatchContext; 42 import org.ofbiz.service.ModelService; 43 import org.ofbiz.service.ServiceUtil; 44 import org.ofbiz.service.GenericServiceException; 45 import org.ofbiz.service.LocalDispatcher; 46 47 48 57 public class ContentPermissionServices { 58 59 public static final String module = ContentPermissionServices.class.getName(); 60 61 62 public ContentPermissionServices() {} 63 64 101 public static Map checkContentPermission(DispatchContext dctx, Map context) { 102 103 Security security = dctx.getSecurity(); 104 GenericDelegator delegator = dctx.getDelegator(); 105 String statusId = (String ) context.get("statusId"); 106 String privilegeEnumId = (String ) context.get("privilegeEnumId"); 107 GenericValue content = (GenericValue) context.get("currentContent"); 108 Boolean bDisplayFailCond = (Boolean )context.get("displayFailCond"); 109 boolean displayFailCond = false; 110 if (bDisplayFailCond != null && bDisplayFailCond.booleanValue()) { 111 displayFailCond = true; 112 } 113 Debug.logInfo("displayFailCond(0):" + displayFailCond, ""); 114 Boolean bDisplayPassCond = (Boolean )context.get("displayPassCond"); 115 boolean displayPassCond = false; 116 if (bDisplayPassCond != null && bDisplayPassCond.booleanValue()) { 117 displayPassCond = true; 118 } 119 Debug.logInfo("displayPassCond(0):" + displayPassCond, ""); 120 Map results = new HashMap (); 121 String contentId = null; 122 if (content != null) 123 contentId = content.getString("contentId"); 124 GenericValue userLogin = (GenericValue) context.get("userLogin"); 125 String partyId = (String ) context.get("partyId"); 126 if (UtilValidate.isEmpty(partyId)) { 127 String passedUserLoginId = (String )context.get("userLoginId"); 128 if (UtilValidate.isNotEmpty(passedUserLoginId)) { 129 try { 130 userLogin = delegator.findByPrimaryKeyCache("UserLogin", UtilMisc.toMap("userLoginId", passedUserLoginId)); 131 if (userLogin != null) { 132 partyId = userLogin.getString("partyId"); 133 } 134 } catch(GenericEntityException e) { 135 ServiceUtil.returnError(e.getMessage()); 136 } 137 } 138 } 139 if (UtilValidate.isEmpty(partyId) && userLogin != null) { 140 partyId = userLogin.getString("partyId"); 141 } 142 143 144 boolean passed = false; 146 List passedPurposes = (List ) context.get("contentPurposeList"); 150 String contentPurposeString = (String ) context.get("contentPurposeString"); 151 if (UtilValidate.isNotEmpty(contentPurposeString)) { 153 List purposesFromString = StringUtil.split(contentPurposeString, "|"); 154 if (passedPurposes == null) { 155 passedPurposes = new ArrayList (); 156 } 157 passedPurposes.addAll(purposesFromString); 158 } 159 160 EntityPermissionChecker.StdAuxiliaryValueGetter auxGetter = new EntityPermissionChecker.StdAuxiliaryValueGetter("ContentPurpose", "contentPurposeTypeId", "contentId"); 161 auxGetter.setList(passedPurposes); 164 List targetOperations = (List ) context.get("targetOperationList"); 166 String targetOperationString = (String ) context.get("targetOperationString"); 168 if (UtilValidate.isNotEmpty(targetOperationString)) { 170 List operationsFromString = StringUtil.split(targetOperationString, "|"); 171 if (targetOperations == null) { 172 targetOperations = new ArrayList (); 173 } 174 targetOperations.addAll(operationsFromString); 175 } 176 EntityPermissionChecker.StdPermissionConditionGetter permCondGetter = new EntityPermissionChecker.StdPermissionConditionGetter("ContentPurposeOperation", "contentOperationId", "roleTypeId", "statusId", "contentPurposeTypeId", "privilegeEnumId"); 178 permCondGetter.setOperationList(targetOperations); 179 180 EntityPermissionChecker.StdRelatedRoleGetter roleGetter = new EntityPermissionChecker.StdRelatedRoleGetter("Content", "roleTypeId", "contentId", "partyId", "ownerContentId", "ContentRole"); 181 List passedRoles = (List ) context.get("roleTypeList"); 183 if (passedRoles == null) passedRoles = new ArrayList (); 184 String roleTypeString = (String ) context.get("roleTypeString"); 185 if (UtilValidate.isNotEmpty(roleTypeString)) { 186 List rolesFromString = StringUtil.split(roleTypeString, "|"); 187 passedRoles.addAll(rolesFromString); 188 } 189 roleGetter.setList(passedRoles); 190 191 String entityAction = (String ) context.get("entityOperation"); 192 if (entityAction == null) entityAction = "_ADMIN"; 193 if (userLogin != null && entityAction != null) { 194 passed = security.hasEntityPermission("CONTENTMGR", entityAction, userLogin); 195 } 196 197 StringBuffer errBuf = new StringBuffer (); 198 String permissionStatus = null; 199 List entityIds = new ArrayList (); 200 if (passed) { 201 results.put("permissionStatus", "granted"); 202 permissionStatus = "granted"; 203 if (displayPassCond) { 204 errBuf.append("\n hasEntityPermission(" + entityAction + "): PASSED" ); 205 } 206 207 } else { 208 if (displayFailCond) { 209 errBuf.append("\n hasEntityPermission(" + entityAction + "): FAILED" ); 210 } 211 212 if (content != null) 213 entityIds.add(content); 214 String quickCheckContentId = (String ) context.get("quickCheckContentId"); 215 if (UtilValidate.isNotEmpty(quickCheckContentId)) { 216 List quickList = StringUtil.split(quickCheckContentId, "|"); 217 if (UtilValidate.isNotEmpty(quickList)) entityIds.addAll(quickList); 218 } 219 try { 220 boolean check = EntityPermissionChecker.checkPermissionMethod(delegator, partyId, "Content", entityIds, auxGetter, roleGetter, permCondGetter); 221 if (check) { 222 results.put("permissionStatus", "granted"); 223 } else { 224 results.put("permissionStatus", "rejected"); 225 } 226 } catch (GenericEntityException e) { 227 ServiceUtil.returnError(e.getMessage()); 228 } 229 permissionStatus = (String )results.get("permissionStatus"); 230 errBuf.append("\n permissionStatus:" ); 231 errBuf.append(permissionStatus); 232 } 233 234 if ((permissionStatus.equals("granted") && displayPassCond) 235 || (permissionStatus.equals("rejected") && displayFailCond)) { 236 if (displayFailCond || displayPassCond) { 238 if (!passed) { 239 errBuf.append("\n targetOperations:" ); 240 errBuf.append(targetOperations); 241 242 String errMsg = permCondGetter.dumpAsText(); 243 errBuf.append("\n" ); 244 errBuf.append(errMsg); 245 errBuf.append("\n partyId:" ); 246 errBuf.append(partyId); 247 errBuf.append("\n entityIds:" ); 248 errBuf.append(entityIds); 249 250 if (auxGetter != null) { 251 errBuf.append("\n auxList:" ); 252 errBuf.append(auxGetter.getList()); 253 } 254 255 if (roleGetter != null) { 256 errBuf.append("\n roleList:" ); 257 errBuf.append(roleGetter.getList()); 258 } 259 } 260 261 } 262 } 263 Debug.logInfo("displayPass/FailCond(0), errBuf:" + errBuf.toString(), ""); 264 results.put(ModelService.ERROR_MESSAGE, errBuf.toString()); 265 return results; 266 } 267 268 public static Map checkAssocPermission(DispatchContext dctx, Map context) { 269 270 Map results = new HashMap (); 271 Security security = dctx.getSecurity(); 272 GenericDelegator delegator = dctx.getDelegator(); 273 LocalDispatcher dispatcher = dctx.getDispatcher(); 274 Boolean bDisplayFailCond = (Boolean )context.get("displayFailCond"); 275 String contentIdFrom = (String ) context.get("contentIdFrom"); 276 String contentIdTo = (String ) context.get("contentIdTo"); 277 GenericValue userLogin = (GenericValue) context.get("userLogin"); 278 String entityAction = (String ) context.get("entityOperation"); 279 if (entityAction == null) entityAction = "_ADMIN"; 280 List roleIds = null; 281 String permissionStatus = null; 282 283 GenericValue contentTo = null; 284 GenericValue contentFrom = null; 285 try { 286 contentTo = delegator.findByPrimaryKeyCache("Content", UtilMisc.toMap("contentId", contentIdTo) ); 287 contentFrom = delegator.findByPrimaryKeyCache("Content", UtilMisc.toMap("contentId", contentIdFrom) ); 288 } catch (GenericEntityException e) { 289 return ServiceUtil.returnError("Error in retrieving content To or From. " + e.getMessage()); 290 } 291 if (contentTo == null || contentFrom == null) { 292 return ServiceUtil.returnError("contentTo[" + contentTo + "]/From[" + contentFrom + "] is null. "); 293 } 294 Map resultsMap = null; 295 boolean isMatch = false; 296 297 boolean isMatchTo = false; 298 boolean isMatchFrom = false; 299 Map permResults = new HashMap (); 300 String skipPermissionCheck = null; 301 302 if (skipPermissionCheck == null 303 || skipPermissionCheck.length() == 0 304 || (!skipPermissionCheck.equalsIgnoreCase("true") && !skipPermissionCheck.equalsIgnoreCase("granted"))) { 305 List relatedPurposes = EntityPermissionChecker.getRelatedPurposes(contentFrom, null); 307 List relatedPurposesTo = EntityPermissionChecker.getRelatedPurposes(contentTo, relatedPurposes); 308 Map serviceInMap = new HashMap (); 309 serviceInMap.put("userLogin", userLogin); 310 serviceInMap.put("targetOperationList", UtilMisc.toList("CONTENT_LINK_TO")); 311 serviceInMap.put("contentPurposeList", relatedPurposesTo); 312 serviceInMap.put("currentContent", contentTo); 313 serviceInMap.put("displayFailCond", bDisplayFailCond); 314 315 try { 316 permResults = dispatcher.runSync("checkContentPermission", serviceInMap); 317 } catch (GenericServiceException e) { 318 Debug.logError(e, "Problem checking permissions", "ContentServices"); 319 } 320 permissionStatus = (String )permResults.get("permissionStatus"); 321 if(permissionStatus == null || !permissionStatus.equals("granted") ) { 322 if (bDisplayFailCond != null && bDisplayFailCond.booleanValue()) { 323 String errMsg = (String )permResults.get(ModelService.ERROR_MESSAGE); 324 results.put(ModelService.ERROR_MESSAGE, errMsg); 325 } 326 return results; 327 } 328 serviceInMap.put("currentContent", contentFrom); 329 serviceInMap.put("targetOperationList", UtilMisc.toList("CONTENT_LINK_FROM")); 330 serviceInMap.put("contentPurposeList", relatedPurposes); 331 try { 332 permResults = dispatcher.runSync("checkContentPermission", serviceInMap); 333 } catch (GenericServiceException e) { 334 Debug.logError(e, "Problem checking permissions", "ContentServices"); 335 } 336 permissionStatus = (String )permResults.get("permissionStatus"); 337 if(permissionStatus != null && permissionStatus.equals("granted") ) { 338 results.put("permissionStatus", "granted"); 339 } else { 340 if (bDisplayFailCond != null && bDisplayFailCond.booleanValue()) { 341 String errMsg = (String )permResults.get(ModelService.ERROR_MESSAGE); 342 results.put(ModelService.ERROR_MESSAGE, errMsg); 343 } 344 } 345 } else { 346 results.put("permissionStatus", "granted"); 347 } 348 return results; 349 } 350 351 } 352 | Popular Tags |