Author: jaz
Date: Thu Feb 15 11:19:19 2007 New Revision: 508090 URL: http://svn.apache.org/viewvc?view=rev&rev=508090 Log: added special context-map to allow pre-filling fields in actions to pass to the security serivice; using this will help prevent overriding fields when not intending to Modified: ofbiz/trunk/framework/widget/dtd/widget-screen.xsd ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenCondition.java Modified: ofbiz/trunk/framework/widget/dtd/widget-screen.xsd URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-screen.xsd?view=diff&rev=508090&r1=508089&r2=508090 ============================================================================== --- ofbiz/trunk/framework/widget/dtd/widget-screen.xsd (original) +++ ofbiz/trunk/framework/widget/dtd/widget-screen.xsd Thu Feb 15 11:19:19 2007 @@ -97,6 +97,7 @@ <xs:attributeGroup name="attlist.if-service-permission"> <xs:attribute type="xs:string" name="service-name" use="required"/> <xs:attribute type="xs:string" name="resource-description" use="optional"/> + <xs:attribute type="xs:string" name="context-map" use="optional"/> <xs:attribute name="main-action" use="optional"> <xs:simpleType> <xs:restriction base="xs:token"> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenCondition.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenCondition.java?view=diff&rev=508090&r1=508089&r2=508090 ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenCondition.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenCondition.java Thu Feb 15 11:19:19 2007 @@ -205,13 +205,15 @@ public static class IfServicePermission extends ScreenCondition { protected FlexibleStringExpander serviceExdr; protected FlexibleStringExpander actionExdr; + protected FlexibleStringExpander ctxMapExdr; protected FlexibleStringExpander resExdr; public IfServicePermission(ModelScreen modelScreen, Element condElement) { super(modelScreen, condElement); this.serviceExdr = new FlexibleStringExpander(condElement.getAttribute("service-name")); this.actionExdr = new FlexibleStringExpander(condElement.getAttribute("main-action")); - this.resExdr = new FlexibleStringExpander(condElement.getAttribute("resource-description")); + this.ctxMapExdr = new FlexibleStringExpander(condElement.getAttribute("context-map")); + this.resExdr = new FlexibleStringExpander(condElement.getAttribute("resource-description")); } public boolean eval(Map context) { @@ -220,16 +222,29 @@ if (userLogin != null) { String serviceName = serviceExdr.expandString(context); String mainAction = actionExdr.expandString(context); + String contextMap = ctxMapExdr.expandString(context); String resource = resExdr.expandString(context); - if (resource == null) { + if (UtilValidate.isEmpty(resource)) { resource = serviceName; } - if (serviceName == null) { + if (UtilValidate.isEmpty(serviceName)) { Debug.logWarning("No permission service-name specified!", module); return false; } + Map serviceContext; + Object internalSvcMap = context.get(contextMap); + if (internalSvcMap != null && (internalSvcMap instanceof Map)) { + serviceContext = (Map) internalSvcMap; + + // copy the required internal fields + serviceContext.put("userLogin", context.get("userLogin")); + serviceContext.put("locale", context.get("locale")); + } else { + serviceContext = context; + } + // get the service objects LocalDispatcher dispatcher = this.modelScreen.getDispatcher(context); DispatchContext dctx = dispatcher.getDispatchContext(); @@ -245,7 +260,7 @@ if (permService != null) { // build the context - Map svcCtx = permService.makeValid(context, ModelService.IN_PARAM); + Map svcCtx = permService.makeValid(serviceContext, ModelService.IN_PARAM); svcCtx.put("resourceDescription", resource); if (UtilValidate.isNotEmpty(mainAction)) { svcCtx.put("mainAction", mainAction); |
Free forum by Nabble | Edit this page |