Agrupar recursos por atributos

Es posible que una política de recursos basada en nombres de clase deba ajustarse más que las políticas predeterminadas que se proporcionan con HCL Commerce. Una definición implícita de grupo de recursos proporciona la flexibilidad para proteger recursos de un estado específico. Por ejemplo, si desea crear una política en la que todos los usuarios puedan ejecutar el mandato OrderRead en pedidos que tengan el estado 'P' o 'E', deberá definir un grupo de recursos, tal como se muestra más abajo.

Por qué y cuándo se efectúa esta tarea

Los grupos de recursos se pueden definir totalmente mediante la columna CONDITIONS de la tabla ACRESGRP. La columna CONDITIONS almacena el documento XML que contiene las limitaciones y las parejas de atributo y valor que se utilizan para agrupar recursos. Este tipo de grupo de recursos se denomina grupo de recursos implícito y, generalmente, se utiliza cuando el nombre de clase del recurso resulta insuficiente. Por ejemplo, si una política de control de acceso se aplica a los recursos Order que tienen un estado igual a P (pendiente) o E (editado por un representante del servicio al cliente), se puede definir un grupo de recursos para la misma.

Para agrupar los recursos por atributos distintos del nombre de clase, el recurso debe implementar la interfaz Groupable.

A continuación se muestra un ejemplo del grupo de recursos Order:


<ResourceGroup  Name="OrderResourceGroupwithPEStatus"   
                        OwnerID="RootOrganization">
                <ResourceCondition>
                 <![CDATA[
                  <profile>
                   <andListCondition>
                        <orListCondition>
                      <simpleCondition>
                       <variable name="Status"/>
                       <operator name="="/>
                       <value data="P"/>
                      </simpleCondition>
                      <simpleCondition>
                       <variable name="Status"/>
                       <operator name="="/>
                       <value data="E"/>
                      </simpleCondition>
                         </orListCondition>
                      <simpleCondition>
                       <variable name="classname"/>
                       <operator name="="/>
                       <value
data="com.ibm.commerce.order.objects.Order"/>
                      </simpleCondition>
                         </andListCondition>
                        </profile>
                 
                </ResourceCondition>
                
        </ResourceGroup>     

Donde:

Nombre:
Nombre del grupo de recursos almacenado en la columna GRPNAME de la tabla ACRESGRP.
OwnerID
Propietario del grupo de recursos. Debe ser la organización raíz.
<ResourceCondition>
Especifica los datos que se cargarán en la columna CONDITIONS de la tabla ACRESGRP, para definir el grupo de recursos.
CDATA[...
Indica una sección de datos de tipo carácter que se utilizan exactamente como se escriben.
<profile>
Parámetro necesario para todas las condiciones de recurso.

Un componente esencial de la definición de grupo de recursos es el elemento <simpleCondition> que tiene name="classname". Este elemento identifica la clase java del recurso al que se aplica el grupo. La clase Java, com.ibm.commerce.order.objects.Order, se puede ver en el ejemplo siguiente:


<simpleCondition>
   <variable name="classname"/>
   <operator name="="/>
   <value data="com.ibm.commerce.order.objects.Order"/>
</simpleCondition> 

El siguiente ejemplo especifica la condición en el recurso com.ibm.commerce.objects.order.objects.Order que el estado debe ser igual a P.


<simpleCondition>
    <variable name="Status"/>
    <operator name="="/>
    <value data="P"/>
</simpleCondition> 

En el ejemplo anterior, la <variable name=" value"/> representa los nombres de atributo reconocidos por el método getGroupingAttributeValue (String attributeName, GroupContext context)() en el recurso. Este método forma parte de la interfaz Groupable. Para fines de gestión de grupos de recursos implícitos en la Consola de administración, el atributo también debe definirse en la tabla ACATTR y asociarse con el recurso en la tabla ACRESATREL. Cuando llegue el momento de buscar políticas aplicables para un recurso y una acción determinados, esta condición se comprobará con el llamado al método getGroupingAttributeValue(..), que en este caso pasa por Status como el parámetro attributeName.

<orListCondition> especifica que las condiciones de este bloque deben aplicarse con un operador booleano OR. En este caso, el estado es P o E. <andListConditon> especifica que las condiciones de este bloque deben aplicarse con un operador booleano AND. En este caso, (Classname = com.ibm.commerce.order.objects.Order) AND (Status = P OR Status=E).

A continuación, se muestra una definición de atributo de ejemplo para rellenar la tabla ACATTR siguiente:


<Attribute Name="Status" Type="String">
</Attribute>

El elemento Name es un término que identifica el atributo y el elemento Type identifica el tipo de datos del atributo. Los valores posibles del atributo son:

  • Serie
  • Entero
  • Double
  • Currency
  • Decimal
  • URL
  • Image
  • Fecha

La asociación de un atributo con un recurso se especifica en la definición del recurso. Por ejemplo, el atributo Status está asociado con el OrderResourceCategory en el ejemplo siguiente:


<ResourceCategory
Name="com.ibm.commerce.order.objects.OrderResourceCategory"  
                       
ResourceBeanClass="com.ibm.commerce.order.objects.Order" >

                <ResourceAttributes Name="Status"
                        AttributeTableName="ORDERS"
                        AttributeColumnName="STATUS"
                        ResourceKeyColumnName="ORDERS_ID"/>
</ResourceCategory> 

Donde:

ResourceAttributes
Bloque de código que asocia un atributo con un recurso.
AttributeTableName
Nombre de la tabla de base de datos del recurso.
AttributeColumnName
Nombre de la columna de la tabla de recursos que almacena el atributo.
ResourceKeyColumnName
Nombre de la columna de la tabla de recursos que almacena la clave primaria.