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