I was pondering how best to support On Behalf Of (OBO) in my iParts in addition to the existing support for Logged In ID and Selected ID, when I realized that ASI may have already solved part of this puzzle.
Are there any guidelines or patterns for how these three entities should be used? My initial perception is that OBO substitutes partially for Logged In ID, but things can get really fuzzy when you start playing with combinations.
Here are some example scenarios I'm concerned about. In each case, L is the logged-in ID, S is the Selected ID (falls back to L when blank) and B is OBO (falls back to L when blank).
- If B has more rights than L, should the user have more rights than normal or the same? (Navigation items, queries and other documents, fields they can see/edit)
- How about when B has less rights than L? Should the capabilities be reduced so the user is seeing exactly what B would see?
- If someone logs in but has not searched for a record (S = L), but has entered OBO (B != L) and goes to an "edit my profile" page, should they edit the B or the L record?
- User logs in, finds a record S, and engages OBO. Now they click "Change" and go back to "their own" record. Would that be L or B?
- When OBO is in effect, should change log entries and LastUpdatedBy fields be attributed to B or L?
- If L is a CompanyAdministrator and B is not, can the user do CompanyAdministrator type things on behalf of B?
- If L and B have different member type edit rules, which rules apply?
- If L and B have different access keywords or roles, which rules apply?
- If L is registering B for an event, should they see the only the choices B can see ("true to B's view") or should their permissions allow different choices ("L can perform an override", but also "L can't use OBO to get around a security rule")?
- Does IQA use L or B for @Me, or is there a way to specify which is intended?
- If the user engages OBO, and by being B is able to see different search results to get an S they shouldn't normally get, what happens (and what should happen) when OBO is disengaged?
I think that's probably enough.
For most of these, I can see arguments for either answer. I also recognize that some situations will call for exceptions. I'm not here to design the feature, nor bury it, but to understand it. I'm really hoping ASI has come up with a clear definition of how it is meant to work that clarifies the scenarios above and many others like them.
Any guidance?
-- Bruce Wilson
Director, Technology Solutions
McGladrey LLP
A brief discussion of On Behalf Of
Let me begin by attempting to clarify what On Behalf Of really means.
The only users who should ever need to directly use the OBO control that we see in the latest deployments of the Member website are those users that we might call Customer Service Representatives (CSR).
These would generally be staff-type users with a role that involves answering incoming calls from members and performing some type of commerce transactions on their behalf. Perhaps the better way to think of these users would be those who might traditionally have lived in the Service Central area of iMIS Desktop. Of course, the lines always blur whenever you have users who are permitted to enter commerce transactions in a given feature area (e.g., Register people for events or enter orders).
For the most part, staff-type users should find members by performing a search (currently, by using the Directory find) and selecting the person or organization from the search results. We are working on a new device that will allow the majority of such users to simply click a link or button while viewing a person or organization to begin a new commerce transaction (event registration, order, etc.) on behalf of the currently selected record (provided that the logged-in user has permissions to do so). This link/button will - without the logged-in user even needing to know about the OBO control - set the OBO target as the currently selected record.
What is most important to recognize is that all non-commerce type of interactions with a person or organization record can be performed without ever using On Behalf Of.
Now, to address some of the scenarios you presented...
1-3: Permissions are always determined based on the logged-in user (L). Selecting a person (S) only identifies that person as the currently active record for the purpose of refreshing certain data displayed on the profile pages (account pages).
For users with some level of access to OBO, setting the OBO target (B) only affects the relevant properties of an SOA Cart-ComboOrder (i.e., SoldToCustomerParty, BillToCustomerParty).
4: If I'm understanding this scenario correctly, you are referring to choosing oneself as the OBO target. In this case, my logical answer would be to not do that - just clear the OBO target. However, we do not currently prevent it from happening, so if a user with access to OBO does do this, then the Logged-in user (L) and the OBO target (B) would be the same. Clicking on the logged-in user's (L) name in the utility nav will always display the logged-in user's profile/account page. Clicking on the OBO target's (B) name in the OBO control will always display the OBO target's (B) profile/account page.
One point that this reminds me of is that having an OBO target (B) set does not override any use of a selected ID (S). In fact, there are several legitimate scenarios where a CSR might be working on behalf of one person and still need to go look at another person's record. What should be noted about this scenario is that the selected ID is transient (i.e., it only exists when passed in a URL parameter).
5, 7-8: All actions performed are always attributed to the logged-in user (L). When working on behalf of someone, the logged-in user (L) is the one who is performing actions and is the user whose permissions determine what actions can be performed. Note, however, that not all of the legacy security rules are currently enforced through SOA (e.g., Access Keywords).
6: I am pretty sure that this one is not a valid scenario since only Full Users should ever be permitted to enter transactions on behalf of others. It is worth noting that the "Register someone else" feature is not using OBO and, in fact, only affect the SOA Cart-ComboOrder "Ship To Address" (OrderLine.DeliveryId) for the resulting registration. Nevertheless, a Company Administrator should be able to perform "Company Administrator type things."
9: The same permissions rules apply as from 1-3, 5, 7, and 8. So the logged-in user (L) will see what she is permitted to see. But even if she is able to see a program item for which the OBO target (B) is not eligible, she would not be able to add that item to the registration
10: The best explanation of this is directly from the current documentation - http://docs.imis.com/15.2/#!addingdynamicfilters.htm. One caveat that I want to interject here is that references to user impersonation are specific to the iMISPublic view and should be ignored for iParts-based websites. You should never develop your iParts-based website with the expectation that this legacy user impersonation will be available since we will remove it from the product at some future time
11: The same permissions rules apply as from 1-3, 5, 7, and 8. So the logged-in user (L) will see what she is permitted to see - not what the OBO target (B) is permitted to see.