Proteger recursos

Puede añadir control de acceso a nivel de recursos a los mandatos de controlador o de tareas. La comprobación a nivel de recursos se realiza durante la ejecución de HCL Commerce, basado en los datos que devuelve el método getResources() de un mandato. La comprobación a nivel de recursos también se puede realizar durante la parte de ejecución del mandato correspondiente a performExcecute(), al realizar llamadas directas al gestor de políticas de control de acceso mediante el método void checkIsAllowed(Object resource, String action) throws ECException. Este método generará ECApplicationException si el usuario actual no tiene permiso para realizar la acción especificada en el recurso especificado.

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

Nota: De forma predeterminada, el método getResources() devuelve un valor nulo, y no se lleva a cabo ninguna comprobación a nivel de recursos.

Debe crear una política a nivel de recursos para mandatos nuevos en los casos siguientes:

  • El mandato nuevo es una extensión de un mandato HCL Commerce base que realiza una comprobación a nivel de recursos, y tiene una política a nivel de recursos, pero el mandato nuevo implementa una interfaz diferente a la del mandato base.
  • El mandato nuevo propiamente dicho realiza la comprobación de control de acceso a nivel de recursos.

A continuación se muestra un ejemplo de una política a nivel de recursos:


<Policy
Name="ContractMangersForOrgExecuteContractManageCommandsOnContractResource"
                OwnerID="RootOrganization"
                UserGroup="ContractManagersForOrg"
                ActionGroupName="ContractManage"
                ResourceGroupName="ContractDataResourceGroup"
                PolicyType="groupableTemplate">
</Policy>
Donde:
Nombre:
El nombre de la política.
PolicyType
El tipo de política. Es una política de plantilla agrupable que se aplicará dinámicamente a la entidad de organización que es la propietaria del recurso y a sus predecesoras.
OwnerID
El miembro que posee la política.
UserGroup
La política se aplica a los usuarios de este grupo. La convención de denominación para grupos de acceso en los que los roles adoptan dinámicamente el ámbito de la organización propietaria del recurso es añadir ForOrg al nombre del grupo.
ActionGroupName
El nombre del grupo de acciones que contiene las acciones que se han de realizar en el recurso.
ResourceGroupName
El nombre del grupo de recursos que contiene los recursos en los que se han de llevar a cabo acciones.

En el ejemplo anterior, el grupo de acciones ContractManage es un grupo que contiene el conjunto de mandatos que actuará sobre el grupo de recursos ContractDataResourceGroup. A continuación se muestra un ejemplo del grupo de acciones que se utiliza en la política a nivel de recursos anterior:


<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>

Los mandatos que anteriormente se habían definido como recursos para políticas basadas en roles se definen ahora como acciones. A continuación se muestra una definición de ejemplo de una acción que forma parte del grupo ContractManage anterior:


<Action
Name="com.ibm.commerce.contract.commands.ContractCloseCmd"
       
CommandName="com.ibm.commerce.contract.commands.ContractCloseCmd">
</Action>
Nota: El valor de CommandName debe concordar con el nombre de la interfaz del mandato que realiza la comprobación a nivel de recursos.

La mayor parte de los mandatos funcionan con beans enterprise. Estos beans suelen ser recursos que protegen las políticas a nivel de recursos. A continuación se muestra una definición de ejemplo del grupo de recursos que se utiliza en la política a nivel de recursos anterior:


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

En este ejemplo, se define ContractDataResourceGroup que consta de un recurso. El recurso se define del modo siguiente:


<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>

Donde:

Nombre:
Código que se utiliza para hacer referencia a este recurso en otro lugar del archivo XML.
ResourceBeanClass
La clase que representa el recurso a proteger. Si el recurso es un bean enterprise, la interfaz remota debe ampliar la interfaz Protectable.
ResourceAction
Especifica las acciones que se realizarán en este recurso. Esta información la utiliza la Consola de administración de organizaciones cuando determina qué acciones son válidas con un recurso específico.