Defining relationship groups
If multiple relationships are required to grant
a user access to certain resource, use the RelationGroup
construct.
However a relationship usually satisfies most of the requirement for
this scenario. Relationship groups contain open conditions which are
the conditions for belonging to the relationship group. If you need
to define relationship groups, you must do so by defining the relationship
group information in your XML file, or by modifying the defaultAccessControlPolicies.xml file.
<RelationGroup Name="aValue" OwnerID="Root Organization">
<RelationCondition>
<profile>
Relationship Chain Open Condition XML
</profile>;
</RelationCondition>;
</RelationGroup>;
Relationship chains
Each relationship group consists of one or more
RELATIONSHIP_CHAIN
open conditions, grouped by andListCondition
or
orListCondition
elements. A relationship chain is
a series of one or more relationships. The length of a relationship
chain is determined by the number of relationships it consists of.
To determine the length of the relationship chain, count the number
of <parmeter name= "X" value="Y">
entries in
the XML representation of the relationship chain. The following is
an example of a relationship chain with a length of one.
<openCondition name="RELATIONSHIP_CHAIN">
<parameter name="RELATIONSHIP" value="aValue"/>
</openCondition>;
- aValue
- A string representing the relationship between the user and the
resource. Ensure that the string is one of the relationships checked
in the
fulfills
method of the resource.When a relationship chain has a length of two or more it is a series of two relationships. The first<parmeter name= "X" value="Y">
entry is between a user and an organizational entity. The last<parmeter name= "X" value="Y">
entry is between an organizational entity and the resource. Intermediate<parmeter name= "X" value="Y">
entries in the chain are between organizations. The following is an example of a relationship chain with a length of two.<openCondition name=RELATIONSHIP_CHAIN"> <parameter name="aValue1" value="aValue2"/> <parameter name="RELATIONSHIP" value="aValue3"/> </openCondition>;
- aValue1
- Possible values include
HIERARCHY
andROLE
.HIERARCHY
specifies that there is a hierarchical relationship between the user and the organizational entity in the membership hierarchy.ROLE
specifies that the user plays a role in the organizational entity. If the value ofaValue1
is HIERARCHY, the possible values ofaValue2
includechild
. The value child returns the organizational entity for which the user is a direct child in the member hierarchy. If the value ofaValue1
is ROLE, possible values ofaValue2
include any valid entries in the NAME column of the ROLE table which return all of the organizational entities for which the current user plays this role. - aValue3
- A string representing the relationship between one or more organizational
entities retrieved from evaluating the first parameter and the resource.
This value corresponds to the relationship parameter of the
fulfills()
method on the protectable resource. If more than one organizational entity was returned by evaluating parameteraValue1
, this part of theRELATIONSHIP_CHAIN
is satisfied if at least one of these organizational entities satisfies the relationship specified by parameteraValue2
.
For more information about defining relationships, see Defining relationships.
Defining single-chain relationship groups
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>
The relationship chain has a
length of two
because it consists of two separate
relationships. The first relationship is between the user and its
parent organizational entity. The user is the child
in
that relationship. For the second relationship, the access control
policy manager checks if the parent organizational entity fulfills
the BuyingOrganizationalEntity
relationship with
the resource. In other words, it returns true
if
it is the buying organizational entity of the resource.
Another
example is an access control policy that enforcee that a user has
the role of Account Representative for the organizational entity that
is the buying organizational entity of the resource. Again, this policy
uses a relationship group that is composed of one relationship chain
of a length of two. The first part of the chain finds all of the organizational
entities for which the user has the Account Representative role. Then
for the set of organizational entities, the access control policy
manager checks if at least one of them fulfills the BuyingOrganizationalEntity
relationship
with the resource. If it does, a value of true
is
returned.
<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>
Defining multiple-chain relationship groups
To compose a relationship group that contains a multiple-chain relationship, specify whether the user must satisfy all of the relationship chains or if the user must satisfy at least one of the relationship chains.
BuyingOrganizationalEntity
specified
in the resource. The first chain, that specifies the user must be
the creator of the resource is has a length of one. The second chain,
that specifies that the user must belong to the BuyingOrganizationalEntity
specified
in the resource, has a length of two.<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>
If you require the user to
satisfy either of the two relationship chains, change the <andListConditon>
tag
to the <orListConditon>
tag.