The present invention generally relates to information sharing. More particularly, the present invention generally relates to the sharing of information over a network with users having a required level of permissions and/or access.
There are many types of data that users need to manage and otherwise access. For example, users store and access word processing documents, spreadsheet documents, calendars, telephone numbers, addresses, email messages, financial information, and so on. Other stored information may also include phone numbers, email address, and digital photography. In general, users maintain this information on various personal computers, hand-held computers, pocket-size computers, personal digital assistants, mobile phones and other electronic devices. In most cases, the user-maintained information is stored directly on the respective device. Alternatively, a device may store user information on a storage device that is accessible via a network. Whether the user information is stored directly on a user's device, and/or a network managed storage facility, the user generally must have proper access to the device and/or network in order to retrieve the stored information.
Currently, many corporate networks, and the like, provide users with remote access to some of their data stored on various computing devices. This allows authorized users relatively easy access to data stored on local devices and/or network associated storage devices.
In many instances, it may be desirable to allow users to share various data stored on computing devices and/or corporate network associated storage devices. Although many operating interfaces and computer devices allow users to share authorized accessible information, this sharing facility is generally confined to computers networked in a corporate environment. Moreover, this sharing capability is generally confined to computer programs that are developed using the same programming language.
Therefore, there remains a need for allowing for the sharing of information over a widely dispersed network environment, such as the Internet, that may utilize diverse operating systems and/or computer programs.
The use of application program interfaces (APIs) is prevalent with computer programmers. An API is a tool for a programmer who wishes to create new programs (or applications) that will integrate with many different software platforms. In particular, an API works as an interface between the application program, the operating system, and the CPU/hardware. Therefore, once an API is developed by a programmer, an application utilizing the developed API may run on different CPUs and/or operating systems.
APIs also can be used in the Internet environment. For example, APIs can be used to provide web services to users of the Internet. Using APIs to offer web services allows service providers on the World Wide Web (WWW) to tailor the graphical interface viewed by the users. For example, one service provider may use an API to support a graphical interface designed to sell sports related goods, where another service provider may use the same API to support a graphical interface designed to sell exclusively clothing related goods. Thus, a well designed API may be very useful to a diverse service provider group.
An exemplary embodiment of the present invention provides a method that allows a user to share information over a network using one or more APIs. In particular, one exemplary embodiment of the present invention allows a Microsoft® .NET Passport authenticated user to share information with another Microsoft® .NET Passport authenticated user.
Another exemplary embodiment of the present invention provides a method of processing a received service selection; and identifying a role and an entity associated with the service selection.
Yet another exemplary embodiment of the present invention provides a computer readable media and/or a computer system embodying a method according to an exemplary embodiment of the present invention.
The foregoing aspects and many of the attendant advantages of this invention will become more readily appreciated as the same become better understood by reference to the following detailed description, when taken in conjunction with the accompanying drawings, wherein:
In accordance with the exemplary embodiments of the present invention, various client devices may be interfaced with one or more servers via the Internet, or other similar network environment. In accordance with the aspects of the exemplary embodiments of the present invention, various client devices and servers may communicate regardless of processor class or family, the type and the version of operating system used, the display resolution capability, the installed software components, the peripheral devices connected to the client computers and servers, and/or the like.
The sharing of information between various client devices may be accomplished through the use of one or more application program interfaces (APIs) function calls, and the system/component registry of the various operating systems utilized on the client devices. One exemplary embodiment of such an API is described in the attached appendix. However, those of ordinary art will appreciate the attached API description is provide by way of example only, and that other programming interfaces may also be used with the exemplary embodiments of the present invention.
The Internet 110 may include the use of the World Wide Web (WWW), which may include a plurality of computers, routers, gateways and/or portions of the public switched telephone network (PSTN), as is readily understood to those familiar with the architecture of the Internet.
The networked system 110 may include the use of various client devices 120 and 160. It should be understood that various types of client devices 120 and 160 may be used with the network system 100. Moreover, the client devices 120 and 160 may include the use of an interface, such as a Web browser or other such graphical user interface (GUI).
The networked system 110 also includes a server 130. For simplicity, only one server 130 is shown; however, it should be understood that there may be a number of servers offering various products and services to the client devices 120 and 160. The server 130 provides an interface, e.g., one or more Web pages and/or applications viewable and accessible by the client devices 120 through the Internet 110, using a Web browser installed on the client devices 120 and 160. The interface may be, e.g., hypertext markup language (HTML) pages, dynamic hypertext markup language (DHTML) pages, active server pages (ASP), or the like.
The server 130 is interfaced with a database 140. The database 140 may have stored therein, inter alia, information related to the client devices 120 and 160. Moreover, the database 140 may also include information pertinent to the operation of the server 130. Further discussion of data/information stored in the database 140 will be discussed in conjunction with the exemplary embodiments of the present invention.
In its most basic form, the client device 120 includes at least one processing unit 202 and a memory 204. Depending on the configuration of the client device 120, the memory 204 may include the use of a volatile memory (such as RAM), non-volatile memory (such as ROM, flash memory, etc.), or a combination of the two.
The client device 120 may also have additional features and/or functionality. For example, the client device 120 may also include additional storage, removable and/or non-removable including, but not limited to, magnetic, optical disks or tape. Such additional storage is illustrated in
The client device 120 also includes a communication connection 212 that allows the device to communicate with other devices via the Internet 110. The communication connection 212 is used to communicate computer-readable instructions, data structures, program modules, and/or other data using a modulated data signal that includes a carrier wave or other transport mechanism modulated of the data to be communicated. The communication connection 212 may be facilitated by way of wired connections, both copper and optical, and wireless connections such as acoustic, radio frequency, infrared, etc.
The client device 120 may also include various input devices 214. These input devices 214 may include a keyboard, a mouse, a pen, a voice input device, a touch input device, etc. Moreover, the server device 120 may also include output devices 216, such as a display, speakers, a printer, etc. Further description of these devices is not required, as such is known to those having ordinary skill in the art.
As illustrated, a user's authentication is received by the server 130 via the client device 120 (B300). In general, the user's authentication received by the server 130 via the client device 120 authorizes a user of the client device 120 to access information and data associated with the authorized user, which may be stored in the database 140. For example, the authorization process may result in the authorized user having access to a subscription service once a successful authorization process is completed. The process may also include provisioning space to store information associated with the authorized user, in the database 140, if such space is not already provisioned (B300).
Next, the server 130 receives a user identified service selection from the client device 120 (B304). Then, the server 130 receives a user identified identity from the client device 120 (B306). In addition, the server 130 also receives a user identified role, or multiple roles, for the selected identity from block B306 (B308). After the server 130 receives the identified service, the identified identity and the identified role(s) from the client device 120, the server 130 sends out the associated service and associated role to the identity selection received in block B306 (B310). In response to the communication of block B310, acceptance of the service and role(s) is received from the identity selection from block B306 (B312). Finally, an indication is received that the selected identity has added the accepted identified service and role(s) to a stored list resident on the device operated by the selected identity (B313).
Next, the user accesses an associated calendar application. This calendar application may be built into the Microsoft® network, or some other front end associated with the authenticated user (point 2). Using the calendar interface, the user may identify one or more users that may share the contents of the calendar. The registration process generally requires the user to identify the service to be shared, in this case the calendar, the role(s) the shared user will have in conjunction with the shared service, and the identity information related to the entity with whom the calendar is to be shared (points 4 and 5). Examples of the roles that may be given include the right to read the calendar, the right to write or make changes to the calendar, and/or the right to see when the owner of the calendar is free and/or busy. In addition, any users that have sharing rights to the calendar are retrieved and annotated within the front end of the calendar.
The identity information referred to above may be an email address, a telephone number, or a Passport associated with the Microsoft® .Net Passport authentication system. Generally, the identity information may be any unique identifier that may be used to identify a user that is being given access to the user's (AbbySalazar@MSN.com) calender. Moreover, the identity information may also include the identity of more than one user that will have access to the calendar. For example, the user (AbbySalazar@MSN.com) can designate more than one person, or a group of individuals, that will have access rights to the calendar.
Once the service, role(s) and identity are identified, an invite is communicated to the user that is to have access to the calendar. In this case, the user's email address (Patrick_Blakeman@hotmail.com) is used to communicate the invite (point 6). Upon acceptance of the invite, resident memory/storage in the invitee's computer device stores an indication that the user has rights to the calendar (point 7).
In the case of the networked system 110 illustrated in
Next, by way of the operational front end, the authorized user (Patrick_Blakeman@hotmail.com) sees access has been provided to another user's (AbbySalazar@MSN.com) calendar (point 2). At this point, the authorized user may access the calendar associated with AbbySalazar@MSN.com (point 3). In one scenario, the calendar associated with the sharing user determines that the authorized user is not the actual owner of the calendar, and requests the role, or roles, the authorized user has in association with the calendar (point 4). This role is returned to the owner's calendar (point 5). Finally, based on the authorized user's role, at least a portion of the calendar is returned to the front end associated with the authorized user (point 6). Again, examples of the roles that may be given include the right to read the calendar, the right to write or make changes to the calendar, and/or the right to see when the owner of the calendar is free and/or busy.
While the preferred embodiment of the invention has been illustrated and described, it will be appreciated that various changes can be made therein without departing from the spirit and scope of the invention.
Each method call to the system will be required to have additional properties passed in the SOAP header.
Application Header
Used to identify the application calling the method.
This header is REQUIRED on calls.
Authentication Header
ManagedGroupRequest is required.
public class ABAuthHeader:
Properties of a Namespace
C#—Namespace Related Classes
Age-Out Policy
Aging policy:
Services are data or resources stored outside the system. Example: Calendars, Files, Photos, Favorites, Address Books, Alert History, . . . .
Properties of a Service
C#—Service Related Classes
[Flags]
Properties of a Membership
C#—Role Related Classes
Standard Roles
To alleviate the burden of each Service Provider creating common Roles for their Services, the system will provide Standard Roles.
The Standard Roles apply system wide. All identities and memberships across the entire system use the same set of Roles.
There will be 5 standard roles available:
These are suggested Roles for use by our Service Providers. They are intended to prevent each Service from creating their own Roles that essentially duplicate common Roles.
Standardized Roles do not have to be created before assigning an Identity to the Role.
Custom Roles
Service Providers need the ability to extend the Standard Roles for privileges specific to the Service Provider's application. For example, a Calendar service may wish to have a Role for users that can reschedule appointments, but not add or delete them.
Service Providers should not create Custom Roles that duplicate the intent of the Standardize Roles. This increases the probability that existing Role/Identity associations can be reused by other Service Providers.
In addition to the existing standard roles, new roles will be defined to support Messenger:
Additionally, a new role has been added to support Namespace quota tracking: OwnedNamespace.
Querying Roles
All the Roles available to assign can be retrieved from the system. Service Providers can view the Roles created by another Service Provider.
Role Capabilities
Namespace Service
The following rules must be enforced by the system based on roles identified in the Namespace service.
The roles defined in the tables below are the only roles recognized and enforced by the system specifically for the described system services. The system does not define behavior associated w/roles for other services using the system methods. This does not preclude other services from using the same roles in a different manner. One would expect that elevated roles such as Admin would have an elevated level of access across all services, but it is completely up to the app assigning the role as to what privileges are enforced. In addition, other custom roles defined in this document that do not appear in the table below, have no privileges to carry out Namespace or Addressbook activities.
If a member is in multiple roles, the highest role “wins”. Highest in this case corresponds to the roles position in the tables below. Example: If a member is an Administrator and a Guest, the member will be treated as an Administrator by the system. The banned role is not enforced for the capabilities feature. In other words if a member is an Admin and they are banned, then they are an admin.
Add Methods:
Delete Methods:
Find & Update Methods:
Banned Role
The Banned role, although not enforced like others are via capabilities, can still be used by partners to “track” a list of banned members from the service. This is due to the fact that users in the Banned role does not have ANY capabilities against the Namespace like Administrators, Asst. Administrators, etc.
HOWEVER, if a user is BOTH Banned and an Administrator, he/she WILL have Administrator capabilities. This is what we mean by not enforcing Banned.
Declined Identities
If a Member has a state of Declined, the Member cannot perform any of the actions indicated above with the exception of AddNamespace, since it is not tied to any particular instance of a Namespace.
A Member must be Pending or Accepted in the Namespace service in order to perform the actions indicated above.
Properties of a Member
C#—Member Related Classes
Invitations are not first class objects in the API. Options can be specified for the invitation, but a handle for the invitation itself cannot be retrieved.
Invitations can be sent via email or by placing an entry in the Pending role of the Invitation service of the invitee (called the “Invitation Pending List” below). Email-based invitations are per ServiceType and require a template.
See Example Scenario and Invitation Service below for more detail on PendingRole-based invitations.
Accept/Decline
When an invitation is sent (through SendInvitation, SetMembership, or AddMember), the system will do the following:
If Pending Role-based, add a ServiceMember entry to the Pending role in the Invitation Service in the recipient's PUID-based Namespace.
Note: Partners can send BOTH pending role and email based invitations at once.
In order to accept the invitation, the client will have to:
In order to decline, the client would have to:
Invitations can be sent via email (DeliveryType=Email described below) or by placing a ServiceMember entry in the Pending role of the Invitation service in the invitee's Namespace (Delivery Type=PendingRole).
This “Invitation Pending List” can be used by partners to query for outstanding invitations sent to a particular identity/PUID to be shown in Messenger, on the web, etc. Partners can then programmatically accept or decline these invitations via AcceptInvitation and DeclineInvitation.
If the invitee's Namespace does not exist, it will be provisioned during the call.
If the Invitation Service does not exist in the invitee's Namespace, the Service will be created. ServiceInfo.InverseRequired will be false.
If the ServiceMember is already in the Pending role in the contact's Namespace, this is not an error. If the invitee's database is not available, the call will throw an exception.
If the pending list has filled the quota, the newest Identity (most recently added) will be deleted.
Properties of Invite Options
C#—Invite Related Classes
[Flags]
A person or group (or classification).
Properties of an Identity
These properties are supplied by the caller.
C#—Identity Related Classes
A principal represents the association of a single Identity and set of Roles.
An Identity cannot be in the same Role more than once.
Properties of a Principal
These properties are supplied by the caller.
C#—Principal Related Classes
Annotations are Name Value Pairs (NVPs) that can be associated with Services and Members (or other objects in the future). All Annotations will be fully accessible by all partners.
There is NO validation on the value fields of an annotation. Any string value can be applied to any annotation type. There is 1K limit on the size of an annotation value.
The following properties will be associated with an Annotation:
In order to set annotation(s), pass the Annotation name with a corresponding value to AddMember, AddService, SetMembership or UpdateMember. Any previous value associated with this name will be overwritten.
In order to update annotation(s), pass the Annotation name with the new value for the annotation to UpdateService or UpdateMember. Since only one annotation of a particular name can exists, this will update the value for the existing annotation.
In order to remove annotation(s), pass the Annotation name with a corresponding value of null to UpdateService or UpdateMember. This will remove the annotation.
A Namespace is a parent container for Services, Role Mappings, Contacts and AB Groups.
AddNamespace will create a Namespace service which will serve as the default service and automatically add the owner to the RoleId(s) specified. The owner of a Namespace is the individual who created the namespace (the user calling the Addnamespace method). The PUID of the owner is determined by the passport cookie passed in. An entry will automatically be added in the ownerPuid's Inverse List.
You MUST be authenticated as the ownerPuid in order to complete the Add. In other words, you may not provision a Namespace on behalf of another user.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsInfo
Properties for the Namespace.
.DisplayName
.CreatorPuid
.CreatorPassportName
[in] namespaceHandle
Identifies the Namespace to delete.
.NamespaceID
.PassportName
roleIds
An array of roleIds to automatically add the owner PUID to. Cannot be null.
[return] Guid
Guid for the Namespace.
Automatic Roles
When a user provisions a Namespace in the system from Messenger or the Spaces experience, he/she must indicate the initial roles to add him/herself to.
This gives the creator the flexibility to create a Namespace in which she is an Administrator and/or a standard member of appropriate capabilities. The creator will be added as a member of type IdentityMember.
The owner will not have any special capabilities by nature of the fact that she is an owner; it will all be driven by which role she is in.
Owner Puid Inverse List
An entry will automatically be added in the ownerPuid's Inverse List for the newly created Namespace service.
Service ID for Namespace Service
The Service ID for the Namespace service is not returned by AddNamespace.
Delete a Namespace. Deletes all Services, Members, Contacts, and Groups associated with the Namespace.
There are two ways a Namespace can be deleted. Either through aging out the Namespace, or through an explicit delete.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
Identifies the Namespace to delete.
.NamespaceID
.PassportName
[return] void
Status is returned in the SOAP response.
Inverse Synchronization Policy
Inverse list policy: When the namespace is deleted, the inverse list entries for all the identities are NOT removed. The inverse list entries are also NOT marked with an IdentityState.Removed in the inverse list.
Update Namespace properties.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] ns
Properties for the Namespace.
.info.DisplayName
[in] namespaceHandle
Identifies the Namespace to update.
.NamespaceID
.PassportName
[return] void
Find a Namespace based on one or more namespaceHandles. Use FindNamespace to retrieve Namespace properties.
Note: This method allows you to find the properties of a Namespace given the handle for the Namespace. For each handle, there will be one Namespace returned (assuming the handle was valid).
DisplayName will not be returned through this method.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandles
Identifies the Namespaces to find.
.NamespaceID
.PassportName
[return] Namespace[ ]
Returns the Namespace properties. DisplayName will NOT be returned.
Returns null if the Namespace does not exist (is not provisioned). An exception is not returned in this case.
Register a single Service in a Namespace.
ServiceID is returned from AddService.
A service of type Namespace CANNOT be added through AddService.
The caller MUST be Passport authenticated and have access to the specified Namespace.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
.NamespaceID
.PassportName
[in] serviceInfo
Identifies the Service to add and the new properties.
NOTE: The type/ForeignID combination will be enforced to be unique.
.Handle.ID
.Handle.Type
.Handle.ForeignID
.DisplayName
.InverseRequired
.Url
[return] short
Unique ID of the service—for use in ServiceHandle.
Memberships
The Memberships array in ServiceInfo MUST BE null when calling AddService.
Delete one Service in a Namespace. This implicitly deletes all the Role Mappings associated to the Service.
DeleteService will delete EVERYTHING associated with the service including Memberships and associated Members.
The caller MUST be Passport authenticated and have access to the specified Namespace.
Method Signature
Parameters
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
.NamespaceID
.PassportName
[in] serviceHandle
.ID
—Or—
The type and foreign id of the target Service.
NOTE: The type/ForeignID combination will be enforced to be unique.
.Type
.ForeignID
May be an empty string if the Service Provider uses the PUID to identify the Service, and this Namespace is a PUID owned Namespace (fDefault=true). Service Providers MUST NOT store the PUID in this field, as this field is passed in the clear during the SOAP requests.
[return] void
Status is returned in the SOAP response.
Update the properties of a single Service.
The ServiceUrl cannot be updated. A fault will be returned.
Inverse list policy for this release: DisplayName updates are not propagated to the inverse list. This is because the inverse list may want to have a custom name for the entry that is different than the name assigned by the sharer.
The caller MUST be Passport authenticated and have access to the specified Namespace.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
.NamespaceID
.PassportName
[in] service
Identifies the Service to update and the new properties.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
Info.Handle.ID
OR
.Info.Handle.Type
.Info.Handle.ForeignID
.Info.DisplayName
.Info.InverseRequired
.Info.Memberships
.Changes
[return] void
Status is returned in the SOAP response.
Memberships
Memberships cannot be set through UpdateService. Use AddMember or SetMembership for this. If Memberships are passed as part of the Service, a BadArgument exception will be thrown.
Find all Services registered to a Namespace.
The caller MUST be Passport authenticated and have access to the specified Namespace.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] namespaceHandle
.NamespaceID
.PassportName
[in] serviceFilter
If types and serviceHandles are all null, or the serviceFilter itself is null, all the Services in the Namespace will be returned.
.Types[ ]
OR
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned.
.ServiceInfo.Handle.ID
ID of the Service. Highly Recommended.
OR
.serviceHandles[ ].Type
.serviceHandles[ ].ForeignID
[return] Service[ ]
Returns the properties of the Services found.
ServiceFilter
Only one of the serviceFilter.Types and serviceFilter.Handles can be specified. Maximum array size for both is 20.
Find all Services shared to a Namespace. This is not the list of Services owned by the Identity(s) represented by the Namespace, but rather the list of Services shared to the Namespace. This list is maintained independently of the Role Mappings in the system. FindInverseServiceResult does not contain the Roles of the Identity, only the Service information.
Note: There is a FindInverseService, AddInverseService, and DeleteInverseService, but there is no UpdateInverseService in the first release. UpdateInverseService would be useful for changing the friendly name of a service assigned to me.
The caller MUST be Passport authenticated and have access to the specified Namespace.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceFilter
If types and serviceHandles are all null, or the serviceFilter itself is null, all the Services in the Inverse list will be returned.
Types[ ]
OR
ServiceHandles[ ].Type
ServiceHandles[ ].ForeignID
AND
.LastChange
[return] FindInverseServiceResult
Returns the properties of each Service found.
InverseRequired does not apply. Namespace, Name, URL, and ServiceHandle are supplied.
Any change to the inverse list will update the LastChange date in the result.
Return Value (FindInverseService Result)
Timestamp Synchronization
When FindInverseService is called with an up-to-date timestamp (ServiceFilter.LastChange), NULL will be returned. This indicates that no changes have occurred on the inverse list.
When FindInverseService is called and the inverse list is empty, a FindInverseServiceResult with a new timestamp will be returned.
Any change to the inverse list will update the LastChange date in the result. This LastChange date should be used in subsequent requests to FindInverseService.
If you specify LastChange date greater then the last accessed date for the inverse service, an InvalidSyncTimeStamp fault will be returned.
Adds a Service to the Namespace's Inverse list.
When a Service is added to the Namespace's inverse list, the corresponding Role Mapping's MemberState is updated with MemberState.Approved to indicate this Namespace is no longer Pending. See Add State Policy and EveryoneMember below for more information.
DisplayName and URL for the Inverse Service cannot be set with AddInverseService. These 2 properties will be copied from the Service in the corresponding Namespace.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
.NamespaceID
.PassportName
[in] serviceLocations
.NamespaceHandle.ID
ServiceInfo.Handle.Type
ServiceInfo.Handle.ForeignID
[return] void
Status is returned in the SOAP response.
Transaction Policy
This will be a 2 step synchronous operation that is not transacted. This will be rare, but if any of the steps fail, a fault will be sent back. This means that the following case IS POSSIBLE: An entry is added to the inverse list, but the Namespace is not updated with “Accepted”.
Add State Policy
For AddInverseService to be successful, the Identity must already exist in the Namespace with MemberState.Pending or MemberState.Accepted—or contain an entry for “Everyone.”
The InverseRequired property must be set on the service otherwise an error will be returned.
Removes Services from the Namespace's Inverse list.
The caller MUST be Passport authenticated and have access to the specified Namespace.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] namespaceHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceLocations
.NamespaceHandle.ID
.ServiceInfo.Handle.Type
.ServiceInfo.Handle.ForeignID
[return] void
Status is returned in the SOAP response.
Inverse Synchronization Policy
When the Inverse entry is deleted, the associated Identity in the Service Rolemap is marked with the MemberState.Removed state. The Identity is NOT removed from the Service Rolemap. If the MemberState of the associated Identity cannot be updated, the call will still succeed.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceHandle
The specific Service the Identity is contained within.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.ID
OR
.Type
.ForeignID
[in] Memberships
The membership to add.
.MemberRole
The RoleId of the Role. For example: CalFreeBusy
.Members
Members to add to the specific role
[in] inviteOptions
Specify what style of notification—invitation or announcement, the locale for the notification, etc.
If null, invitations are not sent.
See Invite Options section for more information.
[return] void
Status is returned in the SOAP response.
Add Logic
f you call AddMember in an attempt to add new Members into a role, and a membership already exists, it will not add a new Membership. It will add the new Members to the existing Membership associated with that role. If AddMember is called w/multiple memberships assigned to the same role, these memberships will be merged into the same membership associated w/the assigned role. The memberships passed into AddMember that are merged will not be retrievable individually after the AddMember call.
Sending Invitations
Invitations can be sent through AddMember by passing in inviteOptions. If left out, invitations will not be sent.
Invitations will only be sent to Members that have a MemberState of Pending.
PhoneIdentity
When an Identity of type PhoneIdentity is added via AddMember, any non-numeric digit will be stripped from the PhoneNumber property before insertion into system.
For example:
(425) 232-2322 becomes 4252322322
435-343-2122 becomes 4353432122
Dynamic Members
The MemberState for Identities of types Everyone, Group, or Role requires that it is set to Accepted instead of Pending.
Namespace Service Limitations
Users cannot perform an AddMember on the Namespace service, indicating that the added user has a “higher” role than the original user.
Membership ID
Membership IDs are NOT returned through AddMember. In order to retrieve the Membership IDs, execute a subsequent Find call.
Updates specific properties on one or more members in a Service.
The caller MUST be Passport authenticated and have access to the specified Namespace
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceHandle
The specific Service the Identity is contained within.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.ID
OR
.Type
.ForeignID
[in] Memberships
The membership to update.
.MemberRole
.Members
.Changes
[return] void
Status is returned in the SOAP response.
Properties Changed
When modifying properties through UpdateMember, the Changes and/or IdentityChanges must be specified on the Member.
These properties are used to indicate which fields are being updated through UpdateMember.
Set one or more members to a role in a Service. This means that any roles previously held by this Member are no longer valid.
The caller MUST be Passport authenticated and have access to the specified Namespace
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceHandle
The specific Service the Identity is contained within.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.ID
OR
.Type
.ForeignID
[in] roleId[ ]
[in] members
[in] inviteOptions
Specify what style of notification—invitation or announcement, the locale for the notification, etc.
If null, invitations are not sent.
See Invite Options section for more information.
[return] void
Status is returned in the SOAP response.
Sending Invitations
Invitations can be sent through SetMembership by passing in inviteOptions. If left out, invitations will not be sent.
Invitations will only be sent to Members that have a MemberState of Pending.
Membership IDs
Membership IDs will NOT be reused with SetMembership—all IDs will be reset as a result of the call. If Membership IDs are sent, a BadArgument fault will be returned.
Annotations
SetMembership WILL reset all annotations, since annotations are per membership. This means that partners MUST read annotations and rewrite annotations back to system when performing SetMembership if annotations are to persist across memberships.
Delta Sync
When SetMembership is called, and a subsequent Find call is executed, the Set operation will be represented as a DELETE and then an ADD. This is to ensure data integrity.
PhoneMember
When a member of type Phone is added via SetMembership, any non-numeric digit will be stripped from the PhoneNumber property before insertion into the system.
For example:
(425) 232-2322 becomes 4252322322
435-343-2122 becomes 4353432122
Dynamic Members
The MemberState for Identities of types Everyone, Group, or Role requires that it is set to Accepted instead of Pending.
Namespace Service Limitations
Users cannot perform a SetMembership on the Namespace service, indicating that the added user has a “higher” role than the original user.
Delete one or more Members from a single Service. This removes the Members from the given Roles.
If the requested Member does not exist, the delete fails.
The caller MUST be Passport authenticated and have access to the specified Namespace
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceHandle
The specific Service the Member is contained within.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.ID
OR
.Type
.ForeignID
[in] memberships
The member to delete.
.MemberRole
[return] void
Status is returned in the SOAP response.
FindMembership
Returns a list of services matching the given service filter with their included role maps. If the serviceFilter is null then the method returns all services.
If there are no Identities assigned to a Service, the Service information will still be returned.
The caller MUST be Passport authenticated and have access to the specified Namespace.
MembershipView
Use MembershipView to limit the result set to just the properties you are interested in receiving.
Definitions:
In addition to these fields, the system will always return all boolean, int and datetime fields (all NET value types) irrespective of the view.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[in] namespaceHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceFilter
If the serviceFilter itself is null, all the rolemaps in all Services will be returned. if the ServiceFilter is not null, then we require not null ServiceFilter.Handles.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.Types[ ]
To find Services by one or more types, include each type in the array.
OR
.ID
OR
.ServiceHandles[ ].Type
.ServiceHandles[ ].ForeignID
May be empty string if the Service Provider uses the PUID to identify the Service, and this Namespace is a PUID owned Namespace. Service Providers MUST NOT store the PUID in this field, as this field is passed in the clear during the SOAP requests.
view
MembershipView indicating which properties to return
deltasOnly
If set to true, only changed rolemaps will be returned
lastChange
If deltaOnly==true, lastChange should be set to the last known timestamp returned from FindMembership.
[return] MembershipResult
Services[ ]
C#—Return Value (MembershipResult)
Returns a list of services matching the given service filter with their included role memberships (i.e. the complete rolemap).
The rolemap is limited to the subset of given role IDs.
If the serviceFilter is null then the method returns all services.
If the includedRoleIds are null then the method returns the complete rolemaps.
The caller MUST be Passport authenticated and have access to the specified Namespace.
MembershipView
Use MembershipView to limit the result set to just the properties you are interested in receiving.
Definitions:
In addition to these fields, the system will always return all boolean, int and datetime fields (all .NET value types) irrespective of the view. The cost to return these is minor since these always get sent back by the NET Framework.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[in] namespaceHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceFilter
If the serviceFilter itself is null, all the rolemaps in all Services will be returned. if the ServiceFilter is not null, then we require not null ServiceFilter.Handles.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.Types[ ]
OR
.ID
OR
.ServiceHandles[ ].Type
.ServiceHandles[ ].ForeignID
includedRoleIds
Roles in which to return Members
view
MembershipView indicating which properties to return
[return] MembershipResult
Services[ ]
C#—Return Value (MembershipResult)
Returns a collection of services matching the given service filter with the included Memberships for that role member.
If the serviceFilter is null then the method returns all services. The caller MUST be Passport authenticated and have access to the specified Namespace.
MembershipView
Use MembershipView to limit the result set to just the properties you are interested in receiving.
Definitions:
In addition to these fields, the system will always return all boolean, int and datetime fields (all .NET value types) irrespective of the view. The cost to return these is minor since these always get sent back by the .NET Framework.
Method Signature
Parameters
[in] namespaceHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceFilter
If the serviceFilter itself is null, all the rolemaps in all Services will be returned. if the ServiceFilter is not null, then we require not null ServiceFilter.Handles.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
Types[ ]
OR
.ID
OR
.ServiceHandles[ ].Type
.ServiceHandles[ ].ForeignID
[in] member
The member searched for.
.Id
The Id of the Member over the Private FE. Over the Public FE, only PassportMembers are supported via PassportName.
view
MembershipView indicating which properties to return
[return] MembershipResult
Services[ ]
C#—Return Value (MembershipResult)
MemberHasRole
Determines whether a Member has one of the given roles in the given service.
Returns true if the Member has at least one of the roles for the service, either directly or indirectly through membership in a group or role that is targeted by one of the given roles.
The Member must be Pending or Accepted in the Namespace for MemberHasRole to return true.
Method Signature
Parameters
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceHandle
The specific Service the Member is contained within.
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.ID
OR
.Type
.ForeignID
[in] Member
If PassportMember:
.MemberName
.Puid
If EmailMember:
.EmailAddress
If PhoneMember:
.PhoneNumber
If GuidMember:
.Guid
If EveryoneMember:
No addition parameter required.
If GroupMember:
.Guid
If ServiceMember:
.PhoneNumber
[in] RoleId
The roleIds to search for.
[return] bool
True means Identity has role; False means Identity does not have role.
This method allows the caller of the Service to send an invitation to Members. SendInvitation will reset the MemberState to Pending.
The caller MUST be Passport authenticated and have access to the specified Namespace.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceHandle
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.ID
OR
The type and foreign ID of the target Service.
.Type
.ForeignID
[in] inviteOptions
Specify what style of notification—invitation or announcement, the locale for the notification, etc.
See Invite Options section for more information.
[in] members
Members to add to the specific role
[return] void
Status is returned in the SOAP response.
Adds a Service to the Member's Inverse list and sets the MemberState to Accepted in the originating Namespace.
Also removes the entry from the recipient's Pending list (Messenger Service, Pending Role) if it exists.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
Not used. If sent, a fault will be returned: Bad Argument NamespaceHandle cannot contain both NamespaceId and PassportName values.
[in] serviceLocations
.NamespaceHandle.ID
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned.
.ServiceInfo.Handle.ID
OR
.ServiceInfo.Handle.Type
.ServiceInfo.Handle.ForeignID
[return] void
Status is returned in the SOAP response.
Add State Policy
For AcceptInvitation to be successful, the Identity must already exist in the Namespace with MemberState.Pending or MemberState.Accepted—or contain a dynamic entry in which the member resolves to (i.e. Everyone or Allow role).
The InverseRequired property does not need to be set on the service. In the case that it is not set, an inverse list entry will not be added.
Role Resolution
AcceptInvitation will succeed if the caller is a member of the Namespace indirectly through a role, Address Book group, or “Everyone”. In this case, an entry will be added to the Inverse List, but the MemberState in the original Namespace will not be modified.
If the Service currently has an entry for to Everyone AND the Member specified, AcceptInvitation will set the MemberState to Accepted on the Member—not Everyone—if the Member already exists within the Namespace with MemberState.Pending or MemberState.Accepted.
Sets a user's MemberState to Declined in the originating Namespace.
Also removes the entry from the recipient's Pending list (Messenger Service, Pending Role) if it exists.
Method Signature
Parameters
Information specific to this method is listed here. The rest of the information on the fields can be found in the appropriate sections at the beginning of the document.
[hdr] Application Header
See the SOAP Header section for more information.
[in] namespaceHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceLocations
.NamespaceHandle.ID
If the ID and the Type/ForeignID are both sent in the ServiceHandle, an exception will be returned. To indicate that the Type/ForeignId is being used the ID should be set to 0. To indicate that the ID is to be used the ForeignID should be set to Null.
.ServiceInfo.Handle.ID
OR
.ServiceInfo.Handle.Type
.ServiceInfo.Handle.ForeignID
[return] void
Status is returned in the SOAP response.
Decline State Policy
For DeclineInvitation to be successful, the Member must already exist in the Namespace with MemberState.Pending, MemberState.Declined, or MemberState.Accepted or be a member of another dynamic entry (i.e. Everyone).
Role Resolution
DeclineInvitation will succeed if the caller is a member of the Namespace indirectly through a role, Address Book group, or “Everyone”. In this case, the MemberState in the original Namespace will not be modified.
Add one or more Principals to a Service.
The caller MUST be Passport authenticated and have access to the specified Namespace.
Only Members of type Passport can be added via AddPrincipal. Other MemberTypes are not supported in legacy method signatures, so no fault is required.
AddPrincipalOptions
AddPrincipal
Parameters
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceFilter
The type and foreign id of the target Service. Only one Service may be specified.
[in] addOptions
Specify the whether a notification should be sent. If sending an notification, what style of notification—invitation or announcement, the locale for the notification, etc.
.SendInvitation
.CustomInviteOptions
[in] principals[ ]
The Identitiy and associated Roles to add to the Service. In the first release, only one principal may be added.
.IdentityInfo
.RoleIds[ ]
[return] void
Status is returned in the SOAP response.
IdentityType.Everyone
The IdentityState for Identities of type Everyone requires that AddPrincipalOptions.InitialIdentityState is set to Accepted instead of Pending.
DisplayName
A displayName cannot be passed to AddPrincipal. An error will be returned—“BadArgument Principal.IdentityInfo.DisplayName has to be null”
Delete one or more Principals from a single Service. This removes the Roles from the given Identities. Can also be used to delete an Identity from all Roles in the Service.
If the requested Identity does not exist, the delete fails.
Only Members of type Passport (v10) can be deleted via DeletePrincipal. Other MemberTypes are not supported in legacy method signatures, so no fault is required.
The caller MUST be Passport authenticated and have access to the specified Namespace.
DeletePrincipal
Parameters
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceHandle
The type and foreign id of the target Service.
[in] principals[ ]
The Identities and associated Roles to delete from the Service.
Only one principal allowed per call in this release.
.IdentityInfo
RoleIds[ ]
[return] void
Status is returned in the SOAP response.
Rolemap/Inverse Synchronization Policy
After the specified Roles are removed from the Identity, if the Identity no longer has a Role in the Service, the Inverse entry for the Service will be marked with the IdentityStateRemoved state. The inverse entry is NOT removed from the Inverse list.
This method call has one primary purpose: enumerating the Rolemap.
If there are no Identities assigned to a Service, the Service information will be still be returned. The Principal will be null in that case.
The caller MUST be Passport authenticated and have access to the specified Namespace.
PrincipalFilter
Provide the ability to query for identities in one or more Roles. Gives the ability to request the Allow and Block list identities, without having to retrieve the reverse list.
[in] principalFilter
.RoleIds
FindPrincipal
Parameters
[hdr] Application Header
See the SOAP Header section for more information.
[in] namespaceHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
.PassportName
[in] serviceFilter
If the serviceFilter itself is null, all the Principals in all Services will be returned. if the ServiceFilter is not null, then we require not null ServiceFilter.Handles. You MUST be the owner of the Namespace in this case.
.ServiceTypes[ ]
OR
.ServiceHandles[ ].Type
.ServiceHandles[ ].ForeignID
[in] principalFilter
May also filter only for a given Role.
.RoleIds
[return] Rolemap[ ]
The set of Service/Principal collections for a single Identity within a Namespace.
Enumerating the Rolemap
You must be an owner of the Namespace to enumerate the Rolemap. See the section on Passport Authentication for information on Namespace ownership.
Only one of the serviceFilter.Types and serviceFilter.Handles can be specified.
ServiceFilter indicates which service instances to be included in the result. If ServiceFilter is supplied, then we require not null ServiceFilter.Handles.
PrincipalFilter indicates for each of the service instances to be returned, which principal will be returned—only the principal with roles specified in the input PrincipalFilter will be returned.
If PrincipalFilter is null, all services and all principals within these services will be returned.
If PrincipalFilter.RoleIds is null, all principals within the service instances specified by the ServiceFilter will be returned.
If the principalFilter.RoleIds is set, only the Identities in those Roles are returned.
PrincipalFilter.RoleIds cannot be empty if the PrincipalFilter is defined; a BadArgument error will be returned.
Setting ServiceFilter=null and PrincipalFilter=null returns all principals and services, as expected. If ServiceFilter is not null, then ServiceFilter.Handles must not be null.
LastChange
FindPrincipal will return an error if ServiceFilter.LastChange is specified in this release.
ErrorCode: NotSupported
ErrorString: The specified interface or parameter type is not supported in this release.ServiceFilter.LastChange is not supported
DisplayName
FindPrincipal returns PassportName in DisplayName field if the DisplayName is empty.
LastAccessedDate
The LastAccessedDate on the Namespace is only updated when the owner of the Namespace accesses the Namespace. If another user accesses your Namespace to check their Role, the lastAccessed is not updated.
Returns Rolemap
This method call has one primary purpose:
FindIdentityRoles returns Null if there are no roles for this Identity in this Service (including “Everyone”—see section below on IdentityType.Everyone).
This call does NOT affect the last accessed date on the Namespace. This prevents someone from sharing out their resources to numerous people, and having the resources never expire, because they are constantly accessed by other people.
The caller MUST be Passport authenticated and have access to the specified Namespace.
FindIdentityRoles
Parameters
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
.NamespaceID
.PassportName
[in] serviceHandle
The specific Service the Identity is contained within.
.Type
.ForeignID
[in] identityHandle
.Type
.Name
.Puid
[return] Principal
The IdentityInfo and RoleIds are returned for this identity's access to the service.
Determining Access
You MUST be the Passport authenticated as identityHandle. You may NOT ask for another person's identity on an arbitrary Rolemap.
If the principalFilter.identityHandles must be set to the callers Identity.
If the principalFilter.identityHandles is null, and the caller is not the owner of the Service, an error will be returned.
IdentityType.Everyone
If IdentityType.Everyone is defined in the service's rolemap, we will return TWO principals; one for Everyone and one for the identityHandle.
It is up to the consumer of the method to determine which takes precedence.
DisplayName
FindIdentityRoles returns PassportName in DisplayName field if the DisplayName is empty.
Used to resend invitations to Identities about the Service shared to them.
This method allows the owner of the Service to send an invitation to another user. This method does not allow a user to request access to a Service.
InviteIdentity will reset the IdentityState to Pending.
The caller MUST be Passport authenticated and have access to the specified Namespace.
InviteIdentity
Parameters
[hdr] Application Header
See the SOAP Header section for more information.
[in] nsHandle
Note: The Partner FE (IP filtered) will not have cookies, and therefore the nsId is required.
.NamespaceID
If using the Private FE (IP filtered), and adding a Service to a Namespace associated to my PUID, pass the zero extended PUID as the Namespace Id.
.PassportName
[in] serviceHandle
The type and foreign id of the target Service.
.Type
.ForeignID
[in] inviteOptions
Specify what style of notification—invitation or announcement, the locale for the notification, etc.
See Invite Options section for more information.
[in] identityHandles[ ]
The Identities the invitations should be sent to.
.Type
.Puid
[return] void
Status is returned in the SOAP response.