Hi Scott,

I see now that you introduced the fullPath="true" stuff at http://svn.apache.org/viewvc?rev=935146&view=rev. Is it really needed there?

Thanks

Jacques

From: <jler...@apache.org>
Author: jleroux
Date: Fri Jan 14 21:47:23 2011
New Revision: 1059180

URL: http://svn.apache.org/viewvc?rev=1059180&view=rev
Log:
A modified patch from Sascha based on an intial patch from Abdullah Shaikh "permission error on cancel order item from ecommerce" (https://issues.apache.org/jira/browse/OFBIZ-3075) - OFBIZ-3075

If I cancel an order item from ecommerce. I get, the below error displayed on 
the page.
The Following Errors Occurred:
Unable to cancel order line : WSCO11640 / 00001 / null

There have been a discussion about it in this thread 
http://markmail.org/message/dfkudyvbksvls333

How it works: you can cancel an order item if you create it or have the ORDERMGR_CREATE or ORDERMGR_UPDATE permissions (I added the later to Sascha's patch, else the order manager would be annoyed ;o)
I think this makes sense, because AFAIK there are no other UIs than
https://demo-trunk.ofbiz.apache.org/ordermgr/control/editOrderItems?orderId=...
and
https://demo-trunk.ofbiz.apache.org:8443/ecommerce/control/orderstatus?orderId=...
to cancel an order item. So nobody should be able to bypass his/her permissions... Of course, let me know if you think I could have missed something, thanks

Note also that we had to remove fullPath="true" in <@ofbizUrl>cancelOrderItem</@ofbizUrl> (orderitems.ftl), to avoid InsecureFormPostToSecureRequest error. I don't think it raises any security issues though, has it's done from a javascript call with hidden orderItemSeqId parameter.

Modified:
   ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
   
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderSimpleMethods.xml
   ofbiz/trunk/applications/order/servicedef/services.xml
   ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/order/orderitems.ftl

Modified: 
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml?rev=1059180&r1=1059179&r2=1059180&view=diff
==============================================================================
--- 
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml 
(original)
+++ 
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml 
Fri Jan 14 21:47:23 2011
@@ -599,10 +599,6 @@ under the License.
    </simple-method>

    <simple-method method-name="recreateOrderAdjustments" short-description="Auto 
create OrderAdjustments">
-        <check-permission permission="ORDERMGR" action="_UPDATE">
-            <fail-property resource="OrderErrorUiLabels" 
property="OrderSecurityErrorToRunAutoCreateOrderAdjustments"/>
-        </check-permission>
-        <check-errors/>
        <entity-one entity-name="OrderHeader" value-field="order" 
auto-field-map="true"/>
        <!-- all existing promo order items are cancelled -->
        <get-related value-field="order" relation-name="OrderItem" 
list="orderItems"/>

Modified: 
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderSimpleMethods.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderSimpleMethods.xml?rev=1059180&r1=1059179&r2=1059180&view=diff
==============================================================================
--- 
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderSimpleMethods.xml
 (original)
+++ 
ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderSimpleMethods.xml
 Fri Jan 14 21:47:23 2011
@@ -20,12 +20,44 @@ under the License.

<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/simple-methods.xsd";>
+
+    <!-- Returns hasPermission=true if userLogin partyId equals partyId 
parameter
+         Only the order owner should be able to cancel an item from Ecommerce
+    -->
+    <simple-method method-name="orderAdjustmentPermissionCheck" 
short-description="Party contact mech permission logic">
+        <if-empty field="parameters.partyId">
+            <set field="parameters.partyId" from-field="userLogin.partyId"/>
+        </if-empty>
+        <if-compare-field to-field="userLogin.partyId" field="parameters.partyId" 
operator="equals">
+            <set field="hasPermission" type="Boolean" value="true"/>
+            <field-to-result field="hasPermission"/>
+            <else>
+                <set field="primaryPermission" value="ORDERMGR"/>
+                <set field="altPermission" value="ORDERMGR_ROLE"/>
+                <set field="mainAction" from-field="parameters.mainAction"/>
+ <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/script/org/ofbiz/common/permission/CommonPermissionServices.xml"/>
+                <if-compare field="hasPermission" operator="not-equals" 
value="true">
+                    <set field="resourceDescription" 
from-field="parameters.resourceDescription"/>
+                    <if-empty field="resourceDescription">
+ <property-to-field resource="CommonUiLabels" property="CommonPermissionThisOperation" field="resourceDescription"/>
+                    </if-empty>
+                    <if-compare field="mainAction" value="CREATE" 
operator="equals">
+ <property-to-field resource="OrderErrorUiLabels" property="OrderSecurityErrorToRunCreateOrderAdjustement" field="failMessage"/>
+                    </if-compare>
+                    <if-compare field="mainAction" value="UPDATE" 
operator="equals">
+ <property-to-field resource="OrderErrorUiLabels" property="OrderSecurityErrorToRunAutoCreateOrderAdjustments" field="failMessage"/>
+                    </if-compare>
+                    <set field="hasPermission" type="Boolean" value="false"/>
+                    <field-to-result field="failMessage"/>
+                    <else>
+                        <field-to-result field="hasPermission"/>
+                    </else>
+                </if-compare>
+            </else>
+        </if-compare-field>
+    </simple-method>
+
    <simple-method method-name="createOrderAdjustment" short-description="Create an 
OrderAdjustment">
-        <check-permission permission="ORDERMGR" action="_CREATE">
-            <alt-permission permission="ORDERMGR_ROLE" action="_CREATE"/>
-            <fail-property resource="OrderErrorUiLabels" 
property="OrderSecurityErrorToRunCreateOrderAdjustement"/>
-        </check-permission>
-        <check-errors/>

        <make-value entity-name="OrderAdjustment" value-field="newEntity"/>
        <set-nonpk-fields map="parameters" value-field="newEntity"/>

Modified: ofbiz/trunk/applications/order/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?rev=1059180&r1=1059179&r2=1059180&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/services.xml Fri Jan 14 21:47:23 
2011
@@ -181,9 +181,20 @@ under the License.
        <attribute name="shipmentReceiptId" type="String" mode="IN" 
optional="true"/>
    </service>

+    <service name="orderAdjustmentPermissionCheck" engine="simple"
+ location="component://order/script/org/ofbiz/order/order/OrderSimpleMethods.xml" invoke="orderAdjustmentPermissionCheck">
+        <description>
+            Performs a party contact mech security check. The userLogin 
partyId must equal the partyId parameter.
+            Only the order owner should be able to cancel an item from 
Ecommerce.
+        </description>
+        <implements service="permissionInterface"/>
+        <attribute name="partyId" type="String" mode="IN" optional="true"/>
+    </service>
+
    <service name="createOrderAdjustment" default-entity-name="OrderAdjustment" 
engine="simple"
            location="component://order/script/org/ofbiz/order/order/OrderSimpleMethods.xml" 
invoke="createOrderAdjustment">
        <description>Creates a new order adjustment record</description>
+        <permission-service service-name="orderAdjustmentPermissionCheck" 
main-action="CREATE"/>
        <auto-attributes mode="OUT" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
        <override name="orderAdjustmentTypeId" optional="false"/>
@@ -355,6 +366,7 @@ under the License.
    <service name="recreateOrderAdjustments" engine="simple" auth="true"
            location="component://order/script/org/ofbiz/order/order/OrderServices.xml" 
invoke="recreateOrderAdjustments">
        <description>Remove all existing order adjustments, recalc them and persist 
in OrderAdjustment.</description>
+        <permission-service service-name="orderAdjustmentPermissionCheck" 
main-action="UPDATE"/>
        <attribute name="orderId" type="String" mode="IN" optional="false"/>
    </service>


Modified: 
ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/order/orderitems.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/order/orderitems.ftl?rev=1059180&r1=1059179&r2=1059180&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/order/orderitems.ftl 
(original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/order/orderitems.ftl 
Fri Jan 14 21:47:23 2011
@@ -222,7 +222,7 @@ under the License.
            ${uiLabelMap.CommonComments}
            <input class="inputBox" type="text" name="icm_${orderItem.orderItemSeqId}" value="" 
size="30" maxlength="60"/>
          </td>
- <td colspan="4"><a href="javascript:document.addCommonToCartForm.action='<@ofbizUrl fullPath="true">cancelOrderItem</@ofbizUrl>';document.addCommonToCartForm.submit()" class="buttontext">${uiLabelMap.CommonCancel}</a> + <td colspan="4"><a href="javascript:document.addCommonToCartForm.action='<@ofbizUrl>cancelOrderItem</@ofbizUrl>';document.addCommonToCartForm.submit()" class="buttontext">${uiLabelMap.CommonCancel}</a>
            <input type="hidden" name="orderItemSeqId" 
value="${orderItem.orderItemSeqId}"/>
          </td>
        </tr>




Reply via email to