Mise en œuvre du contrôle d'accès dans des beans métier
Si vous créez de nouveaux beans métier qui nécessitent une protection par des stratégies de contrôle d'accès, il y a plusieurs étapes que vous devez suivre.
Procédure
-
Créez un nouveau bean métier, en veillant à ce qu'il s'étende à partir de
com.ibm.commerce.base.objects.ECEntityBean. -
Assurez-vous que l'interface distante du bean étend l'interface
com.ibm.commerce.security.Protectable. -
Si une ressource doit être regroupée par un autre attribut que son nom de classe Java dans le but d'appliquer des stratégies de contrôle d'accès, l'interface distante du bean doit également étendre l'interface
com.ibm.commerce.grouping.Groupable. -
La classe de bean métier hérite des implémentations par défaut pour les méthodes suivantes à partir de com.ibm.commerce.base.objects.ECEntityBean :
-
getOwner -
fulfills -
getGroupingAttributeValue
Remplacez toutes les méthodes dont vous avez besoin. Au minimum, vous devez remplacer la méthode
getOwner.La méthode fulfills doit être implémentée s'il existe une stratégie de contrôle d'accès qui inclut cette ressource dans son groupe de ressources, et spécifie également une relation ou un groupe de relations. La méthode getGroupingAttributeValue doit être implémentée s'il existe une stratégie de contrôle d'accès avec un groupe de ressources implicites qui inclut certaines instances de cette ressource, en fonction des valeurs d'attributs spécifiques (par exemple, s'il y avait une stratégie de contrôle d'accès qui se rapporte uniquement aux commandes avec le statut = 'P', en attente).
Notez que si la seule relation nécessaire est "owner" (propriétaire), alors vous n'avez pas besoin de remplacer la méthode fulfills. Dans ce cas, le gestionnaire de stratégie utilisera le résultat de la méthode getOwner().
Les implémentations par défaut de ces méthodes sont montrées dans les extraits de code suivants. Ces implémentations proviennent de la classe ECEntityBean.
************************************************************************ public Long getOwner() throws Exception { return null; } ************************************************************************************************************************************************ public boolean fulfills(Long member, String relationship) throws Exception { return false; } ************************************************************************
Voici des exemples d'implémentation de ces méthodes basées sur les implémentations utilisées dans le bean OrderBean :************************************************************************ public Object getGroupingAttributeValue(String attributeName, GroupingContext context) throws Exception { return null; } ************************************************************************- Pour la méthode getOwner, la logique de la méthode fournie est la suivante :
*********************************************************************** com.ibm.commerce.common.objects.StoreEntityAccessBean storeEntAB = new com.ibm.commerce.common.objects.StoreEntityAccessBean(); storeEntAB.setInitKey_storeEntityId(getStoreEntityId().toString()); return storeEntAB.getMemberIdInEJBType(); *********************************************************************** - Pour la méthode fulfills, la logique de la méthode fournie est :
************************************************************************ if ("creator".equalsIgnoreCase(relationship)) { return member.equals(bean.getMemberId()); } else if ("BuyingOrganizationalEntity".equalsIgnoreCase(relationship)) { return (member.equals(bean.getOrganizationId())); } else if ("sameOrganizationalEntityAsCreator". equalsIgnoreCase(relationship)) { com.ibm.commerce.user.objects.UserAccessBean creator = new com.ibm.commerce.user.objects.UserAccessBean(); creator.setInitKey_MemberId(bean.getMemberId().toString()); com.ibm.commerce.user.objects.UserAccessBean ab = new com.ibm.commerce.user.objects.UserAccessBean(); ab.setInitKey_MemberId(member.toString()); if (ab.getParentMemberId().equals(creator.getParentMemberId())) return true; } return false; ************************************************************************ - Pour la méthode getGroupingAttributeValue, la logique de la méthode fournie est la suivante :
************************************************************************ if (attributeName.equalsIgnoreCase("Status")) return getStatus(); return null; ************************************************************************
-
- Créez (ou recréez) le bean d'accès et le code généré du bean métier.
Résultats
Notez que si vous examinez d'autres beans d'entité publique HCL Commerce pour comprendre comment les méthodes getOwner, fulfills et getGroupingAttributeValue sont implémentées, vous remarquerez que ces méthodes sont implémentées dans la classe auxiliaire d'accès pour les beans. Puisque les méthodes sont implémentées dans les classes auxiliaires d'accès plutôt que directement dans la classe de bean, les signatures de méthode sont légèrement différentes. En particulier, pour les méthodes, prenez un paramètre d'entrée supplémentaire pour que l'objet lui-même soit transmis à l'auxiliaire d'accès.
Vous must vous assurer que lorsque vous créez de nouveaux beans, vous implémentez ces méthodes directement dans la classe de bean. En outre, vous ne devez modifier aucune de ces méthodes dans les classes auxiliaires d'accès des beans d'entité publique HCL Commerce.