Regroupement de ressources par attributs
Il peut être nécessaire qu'une stratégie de ressource basée sur des noms de classe doive être plus précise que les stratégies par défaut fournies avec HCL Commerce. Une définition de groupe de ressources implicite offre toute la flexibilité requise pour protéger les ressources d'un état particulier. Par exemple, si vous souhaitez créer une stratégie où tous les utilisateurs peuvent exécuter l'instruction OrderRead sur les commandes dont le statut est P (en attente) ou E (en cours d'édition par un représentant du service clientèle), vous devez alors définir un groupe de ressources comme indiqué ci-après.
Pourquoi et quand exécuter cette tâche
CONDITIONS de la table ACRESGRP. La colonne CONDITIONS stocke le document XML contenant les contraintes et les paires de valeurs d'attribut utilisées pour le regroupement des ressources. Ce type de groupe de ressources est appelé par un groupe de ressources implicite et est généralement utilisé lorsque le nom de classe de la ressource n'est pas suffisant. Par exemple, si une stratégie de contrôle d'accès s'applique aux ressources Order (commande) dont le statut est P (en attente) ou E (en cours d'édition par un représentant du service clientèle), vous pouvez définir un groupe de ressources pour cette stratégie.Pour que les ressources puissent être regroupées en fonction d'attributs autres que le nom de classe, l'interface groupable doit être implémentée.
Voici un exemple du groupe de ressources 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>
où :
- Nom
- Nom du groupe de ressources stocké dans la colonne GRPNAME de la table ACRESGRP.
- OwnerID
- Propriétaire du groupe de ressources. Il doit s'agir de l'organisation racine.
- <ResourceCondition>
- Spécifie les données qui seront chargées dans la colonne CONDITIONS de la table ACRESGRP, afin de définir le groupe de ressources.
- <![CDATA[…
- Indique une section de données de type caractères qui seront utilisées exactement telles qu'elles sont saisies.
- <profile>
- Paramètre obligatoire pour toutes les conditions de ressource.
Un composant essentiel de la définition du groupe de ressources est l'élément <simpleCondition> pour lequel name="classname". Cet élément identifie la classe Java de la ressource à laquelle s'applique le groupe. La classe java, com.ibm.commerce.order.objects.Order, peut être vu dans l'exemple suivant :
<simpleCondition>
<variable name="classname"/>
<operator name="="/>
<value data="com.ibm.commerce.order.objects.Order"/>
</simpleCondition>
L'exemple suivant spécifie la condition sur la ressource com.ibm.commerce.objects.order.objects.Order, à savoir que son statut doit être P.
<simpleCondition>
<variable name="Status"/>
<operator name="="/>
<value data="P"/>
</simpleCondition>
Dans l'exemple précédent, la variable <variable name=" value"/> représente les noms d'attributs reconnus par la méthode getGroupingAttributeValue (String attributeName, GroupContext context)() sur la ressource. Cette méthode fait partie de l'interface groupable. A des fins de gestion de groupes de ressources implicites dans la console d'administration, l'attribut doit également être défini dans la table ACATTR et associé à la ressource dans la table ACRESATREL. Lorsqu'il est temps de trouver les stratégies applicables pour une ressource et une action données, cette condition est vérifiée via l'appel de la méthode getGroupingAttributeValue(..), qui, dans ce cas, transmet Status comme paramètre attributeName.
<orListCondition> indique que les conditions situées dans ce bloc doivent être appliquées à l'aide d'un opérateur booléen OR. En l'occurrence, l'état est P ou E. <andListConditon> indique que les conditions situées dans ce bloc doivent être appliquées à l'aide d'un opérateur booléen AND. Dans ce cas, (Classname = com.ibm.commerce.order.objects.Order) AND (Status = P OR Status=E).
Vous trouverez ci-dessous un exemple de définition d'attribut pour le remplissage de la table ACATTR.
<Attribute Name="Status" Type="String">
</Attribute>
L'élément Name permet d'identifier l'attribut, tandis que l'élément Type identifie le type de données de l'attribut. Les valeurs possibles pour l'attribut sont les suivantes :
- Chaîne
- Entier
- Double
- Monnaie
- Décimal
- URL
- Image
- Date
L'association d'un attribut à une ressource est spécifiée dans la définition de la ressource. Par exemple, l'attribut Status est associé à OrderResourceCategory dans l'exemple suivant :
<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>
où :
- <ResourceAttributes>
- Bloc de code associant un attribut à une ressource.
- AttributeTableName
- Nom de la table de base de données de la ressource.
- AttributeColumnName
- Nom de la colonne dans la table de ressources stockant l'attribut.
- ResourceKeyColumnName
- Nom de la colonne dans la table de ressources stockant la clé primaire.