Implementar el control de acceso en los beans de datos

Si ha de protegerse un bean de datos, puede protegerse directa o indirectamente mediante las políticas de control de acceso. Si un bean de datos se protege directamente, significa que hay una política de control de acceso que se aplica a ese bean de datos. Si un bean de datos se protege indirectamente, delega la protección en otro bean, para el que ya existe una política de control de acceso.

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

Para determinar si se debe proteger un bean de datos, tenga en cuenta lo siguiente:
  1. ¿La información contenida en el bean de datos es información que necesita protección? Por ejemplo, ¿es información de naturaleza privada? Si no es así, no es necesaria la protección directa mediante el control de acceso. En caso afirmativo, es necesario implementar control de acceso para el bean de datos.
  2. ¿Creará la vista la instancia del bean de datos utilizando información de algún parámetro de entrada? En este caso, debido al hecho de que no está seguro de que el control de acceso ya haya determinado si se permite al usuario acceder a esta información, deberá proteger el nuevo bean de datos.
  3. Las instancias de los beans de datos las crean las vistas. ¿Creará la vista la instancia del bean de datos utilizando el ID de usuario y el ID de tienda del contexto de mandato? Si la respuesta es afirmativa y el control de acceso ya ha determinado que se permite el acceso, no será necesario la protección directa de este bean de datos. Si no, implemente control de acceso para el bean de datos.

Si crea un nuevo bean de datos que debe protegerse directamente con una política de control de acceso, el bean de datos debe:

Procedimiento

  1. Implemente la interfaz com.ibm.commerce.security.Protectable. Como tal, el Bean debe proporcionar una implementación de los métodos getOwner() y fulfills(Long member, String relationship). Cuando un bean de datos implementa la interfaz Protectable, el gestor de beans de datos llama al método isAllowed para determinar si el usuario tiene los privilegios de control de acceso apropiados, basándose en las políticas de control de acceso existentes. El método isAllowed se describe con el siguiente fragmento de código:
    
    isAllowed(Context, "Display", protectable_databean);
    

    donde protectable_databean es el bean de datos que se debe proteger.

  2. Si los recursos con los que interactúa el bean están agrupados mediante un atributo distinto del nombre de clase Java del recurso, el bean debe implementar la interfaz com.ibm.commerce.grouping.Groupable.
  3. Implemente la interfaz com.ibm.commerce.security.Delegator. Esta interfaz se describe con el siguiente fragmento de código:
    
    Interface Delegator {
            Protectable getDelegate();
    }
    
    Nota: Para obtener una protección directa, el método getDelegate debe devolver el bean de datos (es decir, el bean de datos se delega a sí mismo para el control de acceso).

Resultados

La distinción entre los beans de datos que deben protegerse directamente y los que deben protegerse indirectamente es parecida a la distinción entre recursos primarios y dependientes. Si el objeto de bean de datos puede existir por sí mismo, debe protegerse directamente. Si su existencia depende de la existencia de otro bean de datos, debe delegar la protección al otro bean de datos.

Un ejemplo de un bean de datos que debe protegerse directamente es el bean de datos Order (Pedido). Un ejemplo de un bean de datos que debe protegerse indirectamente es el bean de datos OrderItem.

Si crea un nuevo bean de datos que debe protegerse indirectamente con una política de control de acceso, el bean de datos debe implementar la interfaz com.ibm.commerce.security.Delegator: Esta interfaz se describe con el siguiente fragmento de código:

Interface Delegator {
        Protectable getDelegate();
}
Nota: El bean de datos que devuelve getDelegate debe implementar la interfaz Protectable.

Si un bean de datos no implementa la interfaz Delegator, se rellena sin la protección de las políticas de control de acceso.