Analysis of EID and ID Usage
Under development
So far, this just provides a background on where the calls are occurring in the code. The section immediately below is the beginnings of
a higher level analysis of what tools show which kinds of ids.
Presentation-Layer Visibility of DisplayIds and Eids
View | Eids | DisplayIds | Explanation |
|---|---|---|---|
Grade Book |
| Need to check this one | |
Portal Bug Report |
| Looks like it shows the eid on screen to that user and then mails it to us. | |
Roster |
| Each student's eid is visible alongside his/her name for the instructor AND THE OTHER STUDENTS to see | |
RWiki |
| Each page shows who last modified it, format: First Last (DisplayID) | |
Samigo |
| Student eids are displayed on the Scores and Questions pages alongside the student's full name (visible to instructor) | |
Site Info |
| As far as I can tell the only ids shown here are DisplayIds, including Student DisplayIds | |
SU Tool |
| The user logs in with his/her own Eid | |
WebDav |
| The user connects via his/her own Eid and it's that Eid that's displayed under the "Upload/Download Multiple Resources" | |
Chat | Eids?? | DisplayIds?? | Displays first name lastname |
Message Center | Eids?? | DisplayIds?? | Displays kerberos id in 2.1.x |
Gradebook | Eids?? | DisplayIds?? | Displays kerberos id in 2.1.x in column labeled Student ID |
A summary of the usage of EIDs in Sakai 2.3 Tools
Calls to UserDirectoryProvider.getUser() by Class
Class | Method |
|---|---|
edu.amc.sakai.user.JLDAPDirectoryProvider | getUsers(Collection) |
es.udl.asic.user.OpenLdapDirectoryProvider | getUsers(Collection) |
org.sakaiproject.component.umsert.user.IMSEntUserDirectoryProvider | getUsers(Collection) |
org.sakaiproject.component.kerberos.user.KerberosUserDirectoryProvider | findUserByEmail(UserEdit, String) |
org.sakaiproject.component.kerberos.user.KerberosUserDirectoryProvider | getUsers(Collection) |
org.sakaiproject.provider.ucd.impl.UserDirectoryProviderImpl | findUserByEmail(UserEdit, String) |
org.sakaiproject.provider.ucd.impl.UserDirectoryProviderImpl | getUsers(Collection) |
org.sakaiproject.provider.user.FilterUserDirectoryProvider | getUser(UserEdit) |
org.sakaiproject.provider.user.SampleUserDirectoryProvider | findUserByEmail(UserEdit, String) |
org.sakaiproject.provider.user.SampleUserDirectoryProvider | findUsersByEmail(String, UserFactory) |
org.sakaiproject.provider.user.SampleUserDirectoryProvider | getUsers(Collection) |
org.sakaiproject.user.impl.BaseUserDirectoryService | getUser(String) |
org.sakaiproject.user.impl.BaseUserDirectoryService | getUserId(String) |
Calls to UserDirectoryService.getUserId by Class
Class | Method |
|---|---|
org.sakaiproject.user.impl.BaseUserDirectoryService | findUsersByEmail(String) |
org.sakaiproject.user.impl.BaseUserDirectoryService | getUsersByEid(String) |
Calls to User.getEid() by Class – ignoring the Classes listed above
Class | Method | Tool |
|---|---|---|
org.sakaiproject.component.app.profile.ProfileManagerImpl | getEnterpriseIdByAgentUuid(String) | Profile |
org.sakaiproject.component.app.roster.RosterManagerImpl | createParticipantByUser(User) | Roster |
org.sakaiproject.content.tool.ResourcesAction | buildWebdavContext(VelocityPortlet, Context, RunData, SessionState) | WebDav |
org.sakaiproject.metaobj.security.impl.sakai.SecurityBase | morphAgent(User) | N/A |
org.sakaiproject.site.tool.SiteAction | doAdd_participant(RunData) | SiteTool |
org.sakaiproject.site.tool.SiteAction | sendSiteRequest(SessionState, String, int, List) | SiteTool |
org.sakaiproject.tool.assessment.integration.helper.integrated.AgentHelperImpl | getEid(String) | Samigo Services |
org.sakaiproject.tool.assessment.integration.helper.integrated.AgentHelperImpl | getEidById(String) | Samigo Services |
org.sakaiproject.tool.su.SuTool | su() | SU Tool |
org.sakaiproject.user.tool.UsersAction | doSave(RunData, Content) | User Tool |
org.sakaiproject.util.ErrorReporter | logAndMail(String...) | Portal Bug Report |
Calls to User.getDisplayId() by Class
Class | Method | Tool |
|---|---|---|
org.sakaiproject.assignment.impl.BaseAssignmentService | getGradesSpreadsheet(String) | Assignments |
org.sakaiproject.authz.impl.BaseMember | getUserDisplayId() | N/A |
org.sakaiproject.component.section.facade.impl.sakai21.SakaiUtil | convertUser(User) | N/A |
org.sakaiproject.event.impl.UsageSessionServiceAdapter.BaseUsageSession | getUserDisplayId() | N/A |
org.sakaiproject.site.impl.BaseSiteService | getEntityDescription(Reference) | N/A |
org.sakaiproject.site.tool.SiteAction.Participant | getDisplayId() | SiteTool |
uk.ac.cam.caret.sakai.rwiki.utils.UserDisplayHelper | formatDisplayName(String, String) | RWiki |
Potential exposed presentation of Eids
Tool | Explanation |
|---|---|
Profile |
|
Roster |
|
WebDav |
|
SiteTool |
|
Samigo |
|
SU Tool |
|
Portal BugReport |
|
Exposed presentation of DisplayIds
Tool | Explanation |
|---|---|
Assignments |
|
SiteTool |
|
RWiki | Each page shows who last modified it, format: First Last (DisplayID) |
Some explanation of how userId is supplied for a provided user (in answer to Jon's question)
"org.sakaiproject.user.impl.BaseUserDirectoryService"
public String getUserId(String eid) throws UserNotDefinedException
{
eid = cleanEid(eid);
// first, check our map
String id = m_storage.checkMapForId(eid);
if (id != null) return id;
// if we don't have an id yet for this eid, and there's a provider that recognizes this eid, allocate an id
if (m_provider != null)
{
// allocate the id to use if this succeeds
id = assureUuid(null, eid);
// make a new edit to hold the provider's info, hoping it will be filled in
BaseUserEdit user = new BaseUserEdit((String) null);
user.m_id = id;
user.m_eid = eid;
// check with the provider
if (m_provider.getUser(user))
{
// record the id -> eid mapping (could possibly fail if somehow this eid was mapped since our test above)
m_storage.putMap(user.getId(), user.getEid());
return user.getId();
}
}
// not found
throw new UserNotDefinedException(eid);
}
Version | Author | Date |
|---|---|---|
1.0 | James Renfro | 12/01/2006 |
1.1 | James Renfro | 12/20/2006 |
we had a very good (but long) talk about the multiple id issue ins sakai and think we have defined out 'ideal' case
I can summarize this in more detail for you when you'd like.... I'll otherwise be documenting the ideas and beginning some breakdown of how we might actually test the hypothetical's.
In Short:
ID = sakai internal hex code for a user - opaque - may need to force a change on existing user id's to test all cases
EID = MothraID
displayID = one of maid id, kname, student id # (based on context if query to UDP, mailid is default)
DisplayName = LDAP value
since displayId and displayName come from our providers we can answer the question based on the context in which it is asked eg, what is the current activetool?
This will allow flexible adjustment. In a layer of the architecture we can introduce logic/queries/? for the unique display id for a each tool, and for each user's FERPA or FERPA-like situation.
Jp