Definir grupos de relaciones
Si se precisan varias relaciones para otorgar acceso a un determinado recurso, utilice la construcción RelationGroup
. Sin embargo, una relación normalmente satisface la mayor parte de los requisitos para este escenario. Los grupos de relaciones contienen condiciones abiertas que son las condiciones pertenecientes al grupo de relaciones. Si tiene que definir los grupos de relaciones, deberá hacerlo mediante la definición de la información del grupo de relaciones en su archivo XML, o la modificación del archivo defaultAccessControlPolicies.xml.
<RelationGroup Name="aValue" OwnerID="Root Organization">
<RelationCondition>
<profile>
Relationship Chain Open Condition XML
</profile>;
</RelationCondition>;
</RelationGroup>;
Cadenas de relaciones
Cada grupo de relaciones consta de una o varias condiciones de apertura RELATIONSHIP_CHAIN
, que se agrupan mediante los elementos andListCondition
o orListCondition
. Una cadena de relaciones es una serie de una o varias relaciones. La longitud de una cadena de relaciones la determina el número de relaciones de que consta. Para determinar la longitud de la cadena de relaciones, cuente el número de entradas <parmeter name= "X" value="Y">
en la representación XML de la cadena de relaciones. A continuación se muestra un ejemplo de una cadena de relaciones con una longitud de uno.
<openCondition name="RELATIONSHIP_CHAIN">
<parameter name="RELATIONSHIP" value="aValue"/>
</openCondition>;
- aValue
- Una serie que representa la relación entre el usuario y el recurso. Asegúrese de que la serie sea una de las relaciones comprobadas en el método
fulfills
del recurso.Cuando una cadena de relaciones tiene una longitud de dos o más, se trata de una serie de dos relaciones. La primera entrada,<parmeter name= "X" value="Y">
, es entre un usuario y una entidad de organización. La última entrada,<parmeter name= "X" value="Y">
, es entre la entidad y el recurso de organización. Las entradas intermedias<parmeter name= "X" value="Y">
en la cadena son entre organizaciones. A continuación se muestra un ejemplo de una cadena de relaciones con una longitud de dos:<openCondition name=RELATIONSHIP_CHAIN"> <parameter name="aValue1" value="aValue2"/> <parameter name="RELATIONSHIP" value="aValue3"/> </openCondition>;
- aValue1
- Los valores posibles incluyen
HIERARCHY
yROLE
.HIERARCHY
especifica que hay una relación jerárquica entre el usuario y la entidad de organización en la jerarquía de miembros.ROLE
especifica que el usuario desempeña un rol en la entidad de organización. Si el valor deaValue1
es HIERARCHY, los valores posibles deaValue2
incluyenchild
. El hijo del valor devuelve la entidad de organización para la que el usuario es hijo directo en la jerarquía de miembros. Si el valor deaValue1
es ROLE, los valores posibles deaValue2
son cualquier entrada válida en la columna NAME de la tabla ROLE, que devuelve todas las entidades de organización para las que el usuario actual tiene este rol. - aValue3
- Una serie que representa la relación entre una o varias entidades de organización recuperadas de evaluar el primer parámetro y el recurso. Este valor corresponde al parámetro relationship del método
fulfills()
del recurso protegible. Si se devuelve más de una entidad de organización al evaluar el parámetroaValue1
, esta parte deRELATIONSHIP_CHAIN
se satisface si al menos una de estas entidades de organización satisface la relación especificada por el parámetroaValue2
.
Para obtener más información sobre cómo definir relaciones, consulte Definir relaciones.
Definición de grupos de relaciones de una sola cadena
two
. <RelationGroup Name="MemberOf->;BuyerOrganizationEntity" OwnerID="RootOrganization">
<RelationCondition>
<profile>
<openCondition name="RELATIONSHIP_CHAIN">
<parameter name="HIERARCHY" value="child"/>
<parameter name="RELATIONSHIP" value="BuyingOrganizationalEntity"/>
</openCondition>
</profile>
<RelationCondition>
<RelationGroup>
La cadena de relaciones tiene una longitud de dos porque consta de dos relaciones diferentes.two
La primera relación se produce entre el usuario y la entidad de organización padre. El usuario es el child
en esta relación. En la segunda relación, el administrador de políticas de control de acceso comprueba si la entidad de organización satisface la relación BuyingOrganizationalEntity
con el recurso. En otras palabras, devuelve true si se trata de la entidad de organización compradora del recurso.true
Otro ejemplo es una política de control de acceso que imponga que un usuario tenga el rol de representante de cuentas para la entidad de organización que es la entidad de organización compradora del recurso. De nuevo, esta política utiliza el grupo de relaciones que consta de una cadena de relaciones con una longitud de dos. La primera parte de la cadena busca todas las entidades de organización para las que el usuario tiene el rol de representante de cuentas. A continuación, para el conjunto de entidades de organización, el administrador de políticas de control de acceso comprueba si como mínimo una de ellas satisface la relación BuyingOrganizationalEntity
con el recurso. Si es así, se devuelve un valor de true
.
<RelationGroup Name="AccountRep->BuyerOrganizationalEntity" OwnerID="RootOrganization">
<RelationCondition>
<profile>
<openCondition name="RELATIONSHIP_CHAIN">
<parameter name="ROLE" value="Account Representative"/>
<parameter name="RELATIONSHIP" value="BuyingOrganizationalEntity"/>
</openCondition>
</profile>
<RelationCondition>
<RelationGroup>
Definición de grupos de relaciones de varias cadenas
Para componer un grupo de relaciones que contenga una relación de varias cadenas, especifique si el usuario debe cumplir todas las cadenas de relaciones o si el usuario debe cumplir como mínimo una de las cadenas de relaciones.
BuyingOrganizationalEntity
especificada en el recurso. La primera cadena, que especifica que el usuario debe ser el creador del recurso, tiene una longitud de uno. La segunda cadena, que especifica que el usuario debe pertenecer a la entidad BuyingOrganizationalEntity
especificada en el recurso, tiene una longitud de dos.<RelationshipGroup Name="Creator_And_MemberOf->BuyerOrganizationalEntity" OwnerID="RootOrganization">
<RelationCondition>
<profile>
<andListCondition>
<openCondition name="RELATIONSHIP_CHAIN">
<parameter name="RELATIONSHIP" value="creator" />
</openCondition>
<openCondition name="RELATIONSHIP_CHAIN">
<parameter name="HIERARCHY" value="child"/>
<parameter name="RELATIONSHIP" value="BuyingOrganizationalEntity"/>
</openCondition>
</andListCondition>
</profile>
</RelationCondition>
</RelationGroup>
Si solicita al usuario que cumpla una de las dos cadenas de relaciones, cambie la etiqueta <andListConditon>
por la etiqueta <orListConditon>
.