Protection des ressources

Vous pouvez ajouter un contrôle d'accès au niveau de la ressource à des instructions de contrôleur ou d'activités. La vérification au niveau de la ressource est effectuée en phase d'exécution de HCL Commerce, en fonction de données renvoyées par la méthode getResources() d'une instruction. La vérification au niveau de la ressource peut également être effectuée pendant la partie performExcecute() de l'instruction en exécutant des appels directs vers le gestionnaire de stratégies de contrôle d'accès, à l'aide de la méthode void checkIsAllowed(Object resource, String action) throws ECException. Cette méthode renvoie l'exception ECApplicationException si l'utilisateur en cours n'est pas autorisé à exécuter l'action indiquée sur la ressource spécifiée.

Pourquoi et quand exécuter cette tâche

Remarque : Par défaut, la méthode getResources() renvoie une valeur indéfinie et aucune vérification au niveau de la ressource n'est effectuée.

Vous devez créer une stratégie de niveau de ressource pour les nouvelles instructions dans les cas suivants :

  • La nouvelle instruction est l'extension d'une instruction HCL Commerce de base qui effectue une vérification au niveau de la ressource et comporte une stratégie de niveau de ressource, et la nouvelle instruction met en oeuvre une interface différente de l'instruction de base.
  • La nouvelle instruction effectue une vérification de contrôle d'accès au niveau de la ressource.

Voici un exemple de stratégie de niveau de ressource :


<Policy
Name="ContractMangersForOrgExecuteContractManageCommandsOnContractResource"
                OwnerID="RootOrganization"
                UserGroup="ContractManagersForOrg"
                ActionGroupName="ContractManage"
                ResourceGroupName="ContractDataResourceGroup"
                PolicyType="groupableTemplate">
</Policy>
où :
Nom
Nom de la stratégie.
PolicyType
Type de stratégie. Il s'agit d'une stratégie de modèle groupable qui s'appliquera dynamiquement à l'entité organisationnelle, propriétaire de la ressource et de ses ascendants.
OwnerID
Membre propriétaire de la stratégie.
UserGroup
La stratégie s'applique aux utilisateurs de ce groupe. La convention de dénomination des groupes d'accès où les rôles sont dynamiquement étendus à l'organisation propriétaire de la ressource est d'ajouter ForOrg à la fin du nom du groupe.
ActionGroupName
Nom du groupe d'actions contenant les actions à effectuer sur la ressource.
ResourceGroupName
Nom du groupe de ressources contenant les ressources sur lesquelles doivent porter les actions.

Dans l'exemple précédent, le groupe d'actions ContractManage contient l'ensemble d'instructions qui agit sur le groupe ContractDataResourceGroup. Voici un exemple du groupe d'actions utilisé dans la stratégie de niveau de ressource précédente :


<ActionGroupName="ContractManage" OwnerID="RootOrganization">
        <ActionGroupAction
Name="com.ibm.commerce.contract.commands.ContractCancelCmd"/>
        <ActionGroupAction
Name="com.ibm.commerce.contract.commands.ContractCloseCmd"/>
        <ActionGroupAction
Name="com.ibm.commerce.contract.commands.ContractDeleteCmd"/>
</ActionGroup>

Les instructions précédemment définies comme ressources pour les stratégies basées sur les rôles sont à présent définies comme actions. Voici un exemple de définition d'une action faisant partie du groupe ContractManage précédent :


<Action
Name="com.ibm.commerce.contract.commands.ContractCloseCmd"
       
CommandName="com.ibm.commerce.contract.commands.ContractCloseCmd">
</Action>
Remarque : La valeur de CommandName doit correspondre au nom d'interface de l'instruction qui effectue la vérification au niveau de la ressource.

La plupart des instructions s'exécutent avec des beans d'entreprise. Ces beans sont généralement les ressources que protègent les stratégies de niveau de ressource. Voici un exemple de définition du groupe de ressources utilisé dans la stratégie de ressource précédente :


<ResourceGroup Name="ContractDataResourceGroup"
OwnerId="RootOrganization">
        <ResourceGroupResource
Name="com.ibm.commerce.contract.objects.ContractResourceCategory"/>
</ResourceGroup>

Dans cet exemple, ContractDataResourceGroup est défini et constitué d'une ressource. La ressource est définie comme suit :


<ResourceCategory
Name="com.ibm.commerce.contract.objects.ContractResourceCategory" 
               
ResourceBeanClass="com.ibm.commerce.contract.objects.Contract"
                <ResourceAction
Name="com.ibm.commerce.contract.commands.ContractCancelCmd"/>
                <ResourceAction
Name="com.ibm.commerce.contract.commands.ContractCloseCmd"/>
                <ResourceAction
Name="com.ibm.commerce.contract.commands.ContractDeleteCmd"/>
 </ResourceCategory>

où :

Nom
Balise utilisée pour faire référence à cette ressource à d'autres emplacements du fichier XML.
ResourceBeanClass
Classe représentant la ressource à protéger. Si la ressource est un bean d'entreprise, son interface distante doit étendre l'interface Protectable.
ResourceAction
Indique les actions qui seront effectuées sur cette ressource. Ces informations sont utilisées par la console d'administration de l'organisation lors de la définition des actions correctes sur une ressource donnée.