security - propietario - SPContext.Current.Web.CurrentUser devuelve un valor engañoso
sharepoint change permissions (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.
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?
¿Estás navegando como la cuenta de administrador que usaste 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.
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 se muestra en el control de bienvenida (control superior izquierdo)
La otra forma en que SPWeb.CurrentUser podría devolver SHAREPOINT / system es si la web está elevada, aunque no estoy seguro de por qué SPContext.Current se elevaría. ¿En qué tipo de página estás viendo este comportamiento?
Creo que deberías haber incluido este código en SPSecurity.RunWithElevatedPriviliges. Compruébalo una vez. No estoy seguro aunque
El problema se debe a que probablemente obtenga el usuario actual de un SPWeb elevado dentro de un código RunWithElevatedPrivileges. Puedes usar el siguiente fragmento 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 de usuario real en lugar del usuario de SHAREPOINT / System.