2009-01-05 26 views
5

Estoy tratando de averiguar el nombre de usuario actual para mi aplicación sharepoint. Hay más de una manera de cómo hacer esto. Sin embargo, la forma sharepoint devuelve un valor engañoso.SPContext.Current.Web.CurrentUser devuelve un valor engañoso

System.Security.Principal.WindowsIdentity.GetCurrent().Name // returns MY_COMPUTER\\my_user 

HttpContext.Current.User.Identity.Name // returns MY_COMPUTER\\my_user 

HttpContext.Current.Request.ServerVariables["AUTH_USER"] // returns MY_COMPUTER\\my_user 

Microsoft.SharePoint.SPContext.Current.Web.CurrentUser.LoginName // returns SHAREPOINT\\system 

¿Cuál es la causa de este comportamiento? ¿Tendré problemas si uso el modo no compartido?

+0

Esto podría ser un problema de instalación ya que una búsqueda superficial de Internet parece mostrar que regresa correctamente y no el SHAREPOINT \ System que está viendo. –

Respuesta

5

Esto se espera si el usuario es la cuenta del grupo de aplicaciones que ejecuta la aplicación web actual.
Por cierto, se supone que es el mismo nombre que aparece en el control de bienvenida (control superior izquierda)

6

¿Está navegando como cuenta de administrador que utilizó para instalar el sistema? SharePoint "útilmente" cambiará el nombre de SHAREPOINT \ System. Use una cuenta diferente y todos los métodos devolverán el mismo valor.

0

La otra forma SPWeb.CurrentUser podría volver SHAREPOINT \ sistema está si la web es elevada, aunque no estoy seguro por qué SPContext.Current sería elevado. ¿En qué tipo de página estás viendo este comportamiento?

1

Creo que puede haber incluido este código en SPSecurity.RunWithElevatedPriviliges. Compruébalo una vez. No estoy seguro aunque

4

El problema se debe a que probablemente esté recibiendo al usuario actual de un SPWeb elevado dentro de un código RunWithElevatedPrivileges. Se puede utilizar el siguiente fragmento de código para obtener el usuario real

SPWeb site = SPContext.Current.Web; 
SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
    using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID)) 
    { 
     using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID)) 
     { 
      string currUser = site.CurrentUser; //not the ElevatedSite.CurrentUser 
     } 
    } 
}); 

Esto mostrará el nombre real del usuario en lugar del usuario SHAREPOINT \ System.

Cuestiones relacionadas