Implementar el control de acceso en los beans enterprise

Si crea nuevos beans enterprise que requieren protección mediante políticas de control de acceso, debe efectuar varios pasos.

Procedimiento

  1. Crear un nuevo enterprise bean, asegurando que se amplía desde com.ibm.commerce.base.objects.ECEntityBean.
  2. Asegurarse de que la interfaz remota del bean amplía la interfaz com.ibm.commerce.security.Protectable.
  3. Si un recurso va a agruparse por un atributo que no sea el nombre de su clase Java, para aplicar políticas de control de acceso, la interfaz remota del bean también se debe ampliar a la interfaz com.ibm.commerce.grouping.Groupable.
  4. La clase de bean enterprise hereda de com.ibm.commerce.base.objects.ECEntityBean las implementaciones predeterminadas para los métodos siguientes:
    • getOwner
    • fulfills
    • getGroupingAttributeValue

    Modifique los métodos que necesite. Como mínimo, deberá alterar el método getOwner.

    El método fulfills debe implementarse si existe una política de control de acceso que incluya este recurso en su grupo de recursos y también especifica una relación o un grupo de relaciones. El método getGroupingAttributeValue debe implementarse si existe una política de control de acceso con un grupo de recursos implícito que incluya determinadas instancias de este recurso, en función de valores de atributo específicos (por ejemplo, si hay una política de control de acceso que solo pertenece a los Pedidos en estado = 'P' (pendiente)).

    Tenga en cuenta que si la única relación necesaria es propietario ("owner"), no necesita alterar el método fulfills. En este caso, el gestor de políticas utilizará el resultado del método getOwner().

    En los fragmentos de código siguientes se muestran las implementaciones predeterminadas de estos métodos. Estas implementaciones provienen de la clase ECEntityBean.

    
    ************************************************************************
    public Long getOwner() throws Exception 
    { 
       return null; 
    }
    ************************************************************************
    
    
    ************************************************************************
    public boolean fulfills(Long member, String relationship) 
       throws Exception
    { 
          return false; 
    }
    ************************************************************************
    
    
    ************************************************************************
    public Object getGroupingAttributeValue(String attributeName, 
       GroupingContext context) throws Exception 
    { 
          return null; 
    }
    ************************************************************************
    
    A continuación, se muestran implementaciones de ejemplo de estos métodos que se basan en las implementaciones utilizadas en el bean OrderBean:
    • Para el método getOwner, la lógica del método proporcionado es:
      
      *********************************************************************** 
         com.ibm.commerce.common.objects.StoreEntityAccessBean storeEntAB = 
            new com.ibm.commerce.common.objects.StoreEntityAccessBean(); 
         storeEntAB.setInitKey_storeEntityId(getStoreEntityId().toString()); 
         return storeEntAB.getMemberIdInEJBType(); 
      ***********************************************************************
      
    • Para el método fulfills, la lógica del método proporcionado es:
      
      ************************************************************************
      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; 
      ************************************************************************
      
    • Para el método getGroupingAttributeValue, la lógica del método proporcionado es:
      
      ************************************************************************
         if (attributeName.equalsIgnoreCase("Status")) 
             return getStatus(); 
         return null; 
       ************************************************************************
      
  5. Crear (o volver a crear) el código generado y el bean de acceso del enterprise bean.

Resultados

Tenga en cuenta que si examina otros beans de entidad públicos de HCL Commerce para comprender cómo se implementan los métodos getOwner, fulfills y getGroupingAttributeValue, observará que estos métodos se implementan en la clase ayudante de acceso para los beans. Como consecuencia del hecho que los métodos se implementan en las clases ayudante de acceso en lugar de hacerlo directamente en la clase de bean, las firmas de método son ligeramente diferentes. En particular, para que los métodos tomen un parámetro de entrada adicional para el objeto propiamente dicho que se debe pasar en la ayuda de acceso.

Cuando vaya a crear beans nuevos, mustdebe asegurarse de que implementa estos métodos directamente en la clase de bean. Además, no deberá modificar ninguno de dichos métodos de las clases ayudante de acceso de los beans de entidad públicos de HCL Commerce.