Author: byersa
Date: Thu Feb  8 00:17:33 2007
New Revision: 504818

URL: http://svn.apache.org/viewvc?view=rev&rev=504818
Log:
All commits related to adding a special permission requirement for Categories 
that are of the prodCatalogCategoryTypeId = PCCT_VIEW_ALLW and PCCT_PURCH_ALLW.
Two fields, viewAllowPermReqd and purchaseAllowPermReqd were added to 
ProdCatalog entity and corresponding changes to the admin form.
The "permission-service" approach to security was used for several services in 
CategoryServices.xml - addProductToCategory, updateProductToCategory, 
removeProductToCategory
and addProductToCategories.
A permission service, checkCategoryRelatedPermissionService, was added to 
CategoryServices.xml and the internal calls to the 
checkCategoryRelatedPermission method were taken
out of those services.

Modified:
    ofbiz/trunk/applications/product/config/ProductUiLabels.properties
    ofbiz/trunk/applications/product/data/ProductSecurityData.xml
    ofbiz/trunk/applications/product/entitydef/entitymodel.xml
    
ofbiz/trunk/applications/product/script/org/ofbiz/product/category/CategoryServices.xml
    ofbiz/trunk/applications/product/servicedef/services.xml
    ofbiz/trunk/applications/product/webapp/catalog/catalog/ProdCatalogForms.xml

Modified: ofbiz/trunk/applications/product/config/ProductUiLabels.properties
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/config/ProductUiLabels.properties?view=diff&rev=504818&r1=504817&r2=504818
==============================================================================
--- ofbiz/trunk/applications/product/config/ProductUiLabels.properties 
(original)
+++ ofbiz/trunk/applications/product/config/ProductUiLabels.properties Thu Feb  
8 00:17:33 2007
@@ -370,6 +370,8 @@
 ProductCategoryRollupChildCategories=Category Rollup : Child Categories
 ProductCategoryRollupParentCategories=Category Rollup : Parent Categories
 ProductCategorySelectCategoryAndEnterFromDate=Category (select Category and 
enter fromDate)
+ProductCategoryViewAllowPermReqd=Permission required to add product to 
"ViewAllow" category
+ProductCategoryPurchaseAllowPermReqd=Permission required to add product to 
"PurchaseAllow" category
 ProductCategoryWithNoParent=Categories With No Parent Categories
 ProductCategory_Id=Category [ID]
 ProductChangeWithoutProductCatalog=This cannot be changed without re-creating 
the Product Catalog.

Modified: ofbiz/trunk/applications/product/data/ProductSecurityData.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/data/ProductSecurityData.xml?view=diff&rev=504818&r1=504817&r2=504818
==============================================================================
--- ofbiz/trunk/applications/product/data/ProductSecurityData.xml (original)
+++ ofbiz/trunk/applications/product/data/ProductSecurityData.xml Thu Feb  8 
00:17:33 2007
@@ -29,6 +29,8 @@
     <SecurityPermission description="Limited Update operations in the Catalog 
Manager." permissionId="CATALOG_ROLE_UPDATE"/>
     <SecurityPermission description="Limited Delete operations in the Catalog 
Manager." permissionId="CATALOG_ROLE_DELETE"/>
     <SecurityPermission description="Permission required, in addition to other 
applicable permissions, to maintain product price information including prices, 
promotions, and price rules." permissionId="CATALOG_PRICE_MAINT"/>
+    <SecurityPermission description="Allow create/update of 'View Allow' in 
the Catalog Manager." permissionId="CATALOG_VIEW_ALLOW"/>
+    <SecurityPermission description="Allow create/update of 'Purchase Allow' 
in the Catalog Manager." permissionId="CATALOG_PURCHASE_ALLOW"/>
 
     <SecurityGroup description="Limited Catalog Admin group, has limited 
catalog permissions." groupId="CATALOGADMIN_LTD"/>
     <SecurityGroupPermission groupId="CATALOGADMIN_LTD" 
permissionId="CATALOG_VIEW"/>
@@ -36,13 +38,21 @@
     <SecurityGroupPermission groupId="CATALOGADMIN_LTD" 
permissionId="CATALOG_ROLE_UPDATE"/>
     <SecurityGroupPermission groupId="CATALOGADMIN_LTD" 
permissionId="CATALOG_ROLE_DELETE"/>
     <SecurityGroupPermission groupId="CATALOGADMIN_LTD" 
permissionId="OFBTOOLS_VIEW"/>
+    <SecurityGroupPermission groupId="CATALOGADMIN_LTD" 
permissionId="CATALOG_VIEW_ALLOW"/>
+    <SecurityGroupPermission groupId="CATALOGADMIN_LTD" 
permissionId="CATALOG_PURCHASE_ALLOW"/>
     
     <SecurityGroup description="Catalog Admin group, has all catalog 
permissions." groupId="CATALOGADMIN"/>
     <SecurityGroupPermission groupId="CATALOGADMIN" 
permissionId="CATALOG_ADMIN"/>
     <SecurityGroupPermission groupId="CATALOGADMIN" 
permissionId="OFBTOOLS_VIEW"/>
+    <SecurityGroupPermission groupId="CATALOGADMIN" 
permissionId="CATALOG_VIEW_ALLOW"/>
+    <SecurityGroupPermission groupId="CATALOGADMIN" 
permissionId="CATALOG_PURCHASE_ALLOW"/>
     
     <SecurityGroupPermission groupId="FULLADMIN" permissionId="CATALOG_ADMIN"/>
     <SecurityGroupPermission groupId="FULLADMIN" 
permissionId="CATALOG_PRICE_MAINT"/>
+    <SecurityGroupPermission groupId="FULLADMIN" 
permissionId="CATALOG_VIEW_ALLOW"/>
+    <SecurityGroupPermission groupId="FULLADMIN" 
permissionId="CATALOG_PURCHASE_ALLOW"/>
+    <SecurityGroupPermission groupId="FLEXADMIN" 
permissionId="CATALOG_VIEW_ALLOW"/>
+    <SecurityGroupPermission groupId="FLEXADMIN" 
permissionId="CATALOG_PURCHASE_ALLOW"/>
     <SecurityGroupPermission groupId="FLEXADMIN" 
permissionId="CATALOG_CREATE"/>
     <SecurityGroupPermission groupId="FLEXADMIN" 
permissionId="CATALOG_DELETE"/>
     <SecurityGroupPermission groupId="FLEXADMIN" 
permissionId="CATALOG_UPDATE"/>

Modified: ofbiz/trunk/applications/product/entitydef/entitymodel.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitymodel.xml?view=diff&rev=504818&r1=504817&r2=504818
==============================================================================
--- ofbiz/trunk/applications/product/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/applications/product/entitydef/entitymodel.xml Thu Feb  8 
00:17:33 2007
@@ -63,6 +63,8 @@
       <field name="headerLogo" type="url"></field>
       <field name="contentPathPrefix" type="long-varchar"></field>
       <field name="templatePathPrefix" type="long-varchar"></field>
+      <field name="viewAllowPermReqd" type="indicator"></field>
+      <field name="purchaseAllowPermReqd" type="indicator"></field>
       <prim-key field="prodCatalogId"/>
     </entity>
     <entity entity-name="ProdCatalogCategory"

Modified: 
ofbiz/trunk/applications/product/script/org/ofbiz/product/category/CategoryServices.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/category/CategoryServices.xml?view=diff&rev=504818&r1=504817&r2=504818
==============================================================================
--- 
ofbiz/trunk/applications/product/script/org/ofbiz/product/category/CategoryServices.xml
 (original)
+++ 
ofbiz/trunk/applications/product/script/org/ofbiz/product/category/CategoryServices.xml
 Thu Feb  8 00:17:33 2007
@@ -109,11 +109,12 @@
     <simple-method method-name="addProductToCategory" short-description="Add 
Product to Category">
         <!-- note that the security semantics require the user to have the 
general admin permission,
             or the role limited permission and association with the category, 
not the product -->
+            <!-- 
         <set value="addProductToCategory" field="callingMethodName"/>
         <set value="CREATE" field="checkAction"/>
         <call-simple-method method-name="checkCategoryRelatedPermission"/>
         <check-errors/>
-
+        -->
         <make-value value-name="newEntity" 
entity-name="ProductCategoryMember"/>
         <set-pk-fields map-name="parameters" value-name="newEntity"/>
         <set-nonpk-fields map-name="parameters" value-name="newEntity"/>
@@ -130,11 +131,13 @@
             <iterate entry-name="category" list-name="parameters.categories">
                 <!-- note that the security semantics require the user to have 
the general admin permission,
                     or the role limited permission and association with the 
category, not the product -->
+                <!-- 
                 <set field="productCategoryIdToCheck" from-field="category"/>
                 <set field="callingMethodName" value="addProductToCategories"/>
                 <set field="checkAction" value="CREATE"/>
                 <call-simple-method 
method-name="checkCategoryRelatedPermission"/>
                 <check-errors/>
+                 -->
 
                 <make-value value-name="newEntity" 
entity-name="ProductCategoryMember"/>
                 <set field="newEntity.productCategoryId" 
from-field="category"/>
@@ -173,10 +176,12 @@
     <simple-method method-name="updateProductToCategory" 
short-description="Update Product to Category Application">
         <!-- note that the security semantics require the user to have the 
general admin permission,
             or the role limited permission and association with the category, 
not the product -->
+        <!-- 
         <set value="updateProductToCategory" field="callingMethodName"/>
         <set value="UPDATE" field="checkAction"/>
         <call-simple-method method-name="checkCategoryRelatedPermission"/>
         <check-errors/>
+         -->
 
         <make-value value-name="lookupPKMap" 
entity-name="ProductCategoryMember"/>
         <set-pk-fields map-name="parameters" value-name="lookupPKMap"/>
@@ -187,10 +192,12 @@
     <simple-method method-name="removeProductFromCategory" 
short-description="Remove Product From Category">
         <!-- note that the security semantics require the user to have the 
general admin permission,
             or the role limited permission and association with the category, 
not the product -->
+        <!-- 
         <set value="removeProductFromCategory" field="callingMethodName"/>
         <set value="DELETE" field="checkAction"/>
         <call-simple-method method-name="checkCategoryRelatedPermission"/>
         <check-errors/>
+         -->
 
         <!-- If the associated category was the primary category for the 
product, clear that field -->
         <entity-one entity-name="Product" value-name="product" 
auto-field-map="true"/>
@@ -591,8 +598,106 @@
             <then>
                 <log level="verbose" message="Permission check failed, user 
does not have permission"/>
                 <add-error><fail-message message="Security Error: to run 
${callingMethodName} you must have the CATALOG_${checkAction} or CATALOG_ADMIN 
permission or have the CATALOG_ROLE_${checkAction} permission and be associated 
with a category containing this category."/></add-error>
+                <set field="hasPermission" type="Boolean" value="false"/>
             </then>
         </if>
+    </simple-method>
+    
+    <!-- a service verion of checkCategoryRelatedPermission, only with 
purchase/viewAllowPermReqd taken into account -->
+    <simple-method method-name="checkCategoryRelatedPermissionService" 
short-description="Check Product Category Related Permission">
+        <set field="hasPermission" type="Boolean" value="true"/>
+        
+        <!--  Set up for a call to checkCategoryRelatedPermission below, but 
callingMethodName is needed sooner -->
+        <if-empty field-name="parameters.resourceDescription">
+            <set field="callingMethodName" value="this operation"/>
+            <else>
+                <set field="callingMethodName" 
value="parameters.resourceDescription"/>
+            </else>
+        </if-empty>
+        <if-empty field-name="parameters.mainAction">
+            <set field="checkAction" value="UPDATE"/>
+            <else>
+                <set field="checkAction" value="parameters.mainAction"/>
+            </else>
+        </if-empty>
+        
+        <!-- This service is set up to handle lists of categories or one 
category -->
+        <set field="productCategoryIdList" from-field="parameters.categories"/>
+        <if-empty field-name="productCategoryIdList" >
+            <set field="productCategoryIdList[]" 
from-field="parameters.productCategoryId"/>
+        </if-empty>
+
+        <!-- Foreach category iterate thru its possible ProdCatalogCategory 
records -->
+        <iterate entry-name="productCategoryId" 
list-name="productCategoryIdList">
+            <entity-and list-name="prodCatalogCategoryListRaw" 
entity-name="ProdCatalogCategory">
+                   <field-map field-name="productCategoryId"/>
+            </entity-and>
+            <filter-list-by-date list-name="prodCatalogCategoryListRaw" 
to-list-name="prodCatalogCategoryList"/>
+            <iterate entry-name="prodCatalogCategory" 
list-name="prodCatalogCategoryList">
+                   <!-- Only check for View/Purchase Allow instances -->
+                   <if>
+                       <condition>
+                           <or>
+                               <if-compare operator="equals" 
field-name="prodCatalogCategory.prodCatalogCategoryTypeId" 
value="PCCT_VIEW_ALLW"/>
+                               <if-compare operator="equals" 
field-name="prodCatalogCategory.prodCatalogCategoryTypeId" 
value="PCCT_PURCH_ALLW"/>
+                           </or>
+                       </condition>
+                       <then>
+                               <set field="globalViewAllowPermReqd" value="N"/>
+                               <set field="globalPurchaseAllowPermReqd" 
value="N"/>
+                   
+                               <!-- Do not do a permission check unless the 
ProdCatalog requires it -->
+                               <entity-one entity-name="ProdCatalog" 
value-name="prodCatalog">
+                                   <field-map field-name="prodCatalogId" 
env-name="prodCatalogCategory.prodCatalogId"/>
+                               </entity-one>
+                               <if-not-empty field-name="prodCatalog">
+                                   <if-compare operator="equals" 
field-name="prodCatalog.viewAllowPermReqd" value="Y">
+                                       <set field="globalViewAllowPermReqd" 
value="Y"/>
+                                   </if-compare>
+                                   <if-compare operator="equals" 
field-name="prodCatalog.purchaseAllowPermReqd" value="Y">
+                                       <set 
field="globalPurchaseAllowPermReqd" value="Y"/>
+                                   </if-compare>
+                               </if-not-empty>
+                               <if-compare operator="equals" 
field-name="globalViewAllowPermReqd" value="Y" >
+                                <if>
+                                    <condition>
+                                        <not>
+                                                <if-has-permission 
permission="CATALOG" action="_VIEW_ALLOW"/>
+                                        </not>
+                                    </condition>
+                                    <then>
+                                        <log level="verbose" 
message="Permission check failed, user does not have permission"/>
+                                        <set field="failMessage" 
value="Security Error: to run ${callingMethodName} you must have the 
CATALOG_VIEW_ALLOW permission."/>
+                                        <set field="hasPermission" 
type="Boolean" value="false"/>
+                                    </then>
+                                </if>
+                               </if-compare>
+                               <if-compare operator="equals" 
field-name="globalPurchaseAllowPermReqd" value="Y" >
+                                <if>
+                                    <condition>
+                                        <not>
+                                                <if-has-permission 
permission="CATALOG" action="_PURCHASE_ALLOW"/>
+                                        </not>
+                                    </condition>
+                                    <then>
+                                        <log level="verbose" 
message="Permission check failed, user does not have permission"/>
+                                        <set field="failMessage" 
value="Security Error: to run ${callingMethodName} you must have the 
CATALOG_PURCHASE_ALLOW permission."/>
+                                        <set field="hasPermission" 
type="Boolean" value="false"/>
+                                    </then>
+                                </if>
+                               </if-compare>
+                      </then>
+                  </if>
+            </iterate>
+            <!-- Do the "standard" permission checkq -->
+            <if-compare operator="equals" field-name="hasPermission" 
value="true" type="Boolean">
+                <set field="productCategoryIdToCheck" 
from-field="productCategoryId"/>
+                <call-simple-method 
method-name="checkCategoryRelatedPermission"/>
+            </if-compare>
+        </iterate>
+        <field-to-result field-name="hasPermission"/>
+        <field-to-result field-name="failMessage"/>
+                
     </simple-method>
     
     <simple-method method-name="duplicateProductCategory" 
short-description="Duplicate a ProductCategory">

Modified: ofbiz/trunk/applications/product/servicedef/services.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services.xml?view=diff&rev=504818&r1=504817&r2=504818
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/services.xml Thu Feb  8 
00:17:33 2007
@@ -387,6 +387,7 @@
     <service name="addProductToCategories" 
default-entity-name="ProductCategoryMember" engine="simple"
                 location="org/ofbiz/product/category/CategoryServices.xml" 
invoke="addProductToCategories" auth="true">
         <description>Add Product To Multiple Categories</description>
+        <permission-service 
service-name="checkCategoryRelatedPermissionService" main-action="CREATE"/>
         <auto-attributes include="pk" mode="IN" optional="false">
             <exclude field-name="productCategoryId"/>
         </auto-attributes>
@@ -397,6 +398,7 @@
     <service name="addProductToCategory" 
default-entity-name="ProductCategoryMember" engine="simple"
                 location="org/ofbiz/product/category/CategoryServices.xml" 
invoke="addProductToCategory" auth="true">
         <description>Add Product To Category</description>
+        <permission-service 
service-name="checkCategoryRelatedPermissionService" main-action="CREATE"/>
         <auto-attributes include="pk" mode="IN" optional="false"/>
         <auto-attributes include="nonpk" mode="IN" optional="true"/>
         <override name="fromDate" optional="true"/>
@@ -404,12 +406,14 @@
     <service name="updateProductToCategory" 
default-entity-name="ProductCategoryMember" engine="simple"
                 location="org/ofbiz/product/category/CategoryServices.xml" 
invoke="updateProductToCategory" auth="true">
         <description>Add Product To Category</description>
+        <permission-service 
service-name="checkCategoryRelatedPermissionService" main-action="UPDATE"/>
         <auto-attributes include="pk" mode="IN" optional="false"/>
         <auto-attributes include="nonpk" mode="IN" optional="true"/>
     </service>
     <service name="removeProductFromCategory" 
default-entity-name="ProductCategoryMember" engine="simple"
                 location="org/ofbiz/product/category/CategoryServices.xml" 
invoke="removeProductFromCategory" auth="true">
         <description>Remove Product From Category</description>
+        <permission-service 
service-name="checkCategoryRelatedPermissionService" main-action="DELETE"/>
         <auto-attributes include="pk" mode="IN" optional="false"/>
     </service>
 
@@ -991,4 +995,11 @@
         <auto-attributes entity-name="CommunicationEventProduct" include="pk" 
mode="IN" optional="false"/>
     </service>
     
+    <!-- Permission Services -->    
+    <service name="checkCategoryRelatedPermissionService" engine="simple"
+             location="org/ofbiz/product/category/CategoryServices.xml" 
invoke="checkCategoryRelatedPermissionService">
+        <implements service="permissionInterface"/>
+         <attribute type="String" mode="IN" name="productCategoryId" 
optional="true"/>
+         <attribute type="List" mode="IN" name="categories" optional="true"/>
+    </service>
 </services>

Modified: 
ofbiz/trunk/applications/product/webapp/catalog/catalog/ProdCatalogForms.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/catalog/ProdCatalogForms.xml?view=diff&rev=504818&r1=504817&r2=504818
==============================================================================
--- 
ofbiz/trunk/applications/product/webapp/catalog/catalog/ProdCatalogForms.xml 
(original)
+++ 
ofbiz/trunk/applications/product/webapp/catalog/catalog/ProdCatalogForms.xml 
Thu Feb  8 00:17:33 2007
@@ -44,6 +44,13 @@
         <field name="contentPathPrefix" 
title="${uiLabelMap.ProductContentPathPrefix}" 
tooltip="${uiLabelMap.ProductPrependedImageContentPaths}"><text size="60" 
maxlength="250"/></field>
         <field name="templatePathPrefix" 
title="${uiLabelMap.ProductTemplatePathPrefix}"  
tooltip="${uiLabelMap.ProductPrependedTemplatePaths}"><text size="60" 
maxlength="250"/></field>
 
+        <field name="viewAllowPermReqd" 
title="${uiLabelMap.ProductCategoryViewAllowPermReqd}" widget-style="selectBox">
+            <drop-down allow-empty="false" no-current-selected-key="N"><option 
key="Y" description="${uiLabelMap.CommonY}"/><option key="N" 
description="${uiLabelMap.CommonN}"/></drop-down>
+        </field>
+        <field name="purchaseAllowPermReqd" 
title="${uiLabelMap.ProductCategoryPurchaseAllowPermReqd}" 
widget-style="selectBox">
+            <drop-down allow-empty="false" no-current-selected-key="N"><option 
key="Y" description="${uiLabelMap.CommonY}"/><option key="N" 
description="${uiLabelMap.CommonN}"/></drop-down>
+        </field>
+
         <field name="submitButton" title="${uiLabelMap.CommonUpdate}" 
widget-style="smallSubmit"><submit button-type="button"/></field>
     </form>
     <form name="AddProdCatalogToParty" type="single" 


Reply via email to