In teams.demo.openconext.org you can link a Team to an External Group. An External Group is a group that is defined by another service and accessed via the VOOT protocol or through the Grouper API. In the OpenConext API you will see the link with the following features:

If you request the groups of someone then for each External Group that is found (e.g. retrieved from an External Group Provider) the linked Team (if any) are also returned. Note that is does not work the other way around. If you ask for the groups of a person and he/ she is a member of a Team present in Grouper then the External Groups linked to that Team are NOT returned. This is intentional.

The same applies for memberships. If you retrieve the members of an External Group then all the members of the linked (if any) Team are also returned. If you retrieve all the members of a Team then the members of the linked External Group are not retrieved. This is intentional.

The following scenario lets you test this:

A team linked to an External Group. Mujina schacHomeOrganization (example.com) matches the mock basic authentication External Group Provider UserID precondition.

((|urn:collab:person:example.com:(.*)|))

For testing purposes make sure that the logged in person is NOT part of the SURFteam, but of course is member of the External Group.

If you then query for the teams of the logged in person you will get all the (default) groups from the External Group Provider and the SURFteam that is linked.

{
 "startIndex": 0,
 "totalResults": 3,
 "itemsPerPage": 3,
 "filtered": false,
 "updatedSince": false,
 "sorted": false,
 "entry": [
 {
 "id": "urn:collab:group:example.com:fallback-group2",
 "title": "fallback-group2-title",
 "description": "fallback-group2-description",
 "voot_membership_role": "member"
 },
 {
 "id": "urn:collab:group:example.com:fallback-group1",
 "title": "fallback-group1-title",
 "description": "fallback-group1-description",
 "voot_membership_role": "member"
 },
 {
 "id": "urn:collab:group:test.surfteams.nl:nl:surfnet:diensten:okke_test_team",
 "title": "Okke Test Team",
 "description": "Okke test Tea",
 "voot_membership_role": "member"
 }
 ]
}

If you then ask for the groupMembers of one of the External Groups:

https://api.demo.openconext.org/v1/social/rest/people/@me/urn:collab:gro...

You will get all the default members and the members of the Team that is linked to the External Group.

Note that the current implementation does not traverse the linked Team to see if other External Groups are linked. So if uni-X and uni-Y both link one of their External Groups to the X-Y Team and the groups of one the uni-X students is queried (SP does getGroups for student JohnDoe from uni-X) then the uni-X groups are returned where JohnDoe is a member of and the X-Y Team is returned. The uni-Y External Group linked to X-Y Team is NOT returned. It is an uni-directional relationship where the ‘owner’ of the relation is the External Group.

Also if one would make a VO based on the X-Y Team then the linked External Groups are not taken into account.