Obtenga el usuario actualizado en el usuario en SharePoint agregado httpmodule
-
28-09-2020 - |
Pregunta
¿Cómo puedo obtener el usuario actualizado en SharePoint en un módulo agregado?
He intentado los siguientes códigos, pero siempre recibo la cuenta del sistema
SPUser user = null;
using (SPSite site = new SPSite(@"siteName"))
{
using (SPWeb web = site.OpenWeb())
{
user = web.CurrentUser;
}
}
//and
SPContext.Current.Web.CurrentUser
//and
public SPUser GetUserWithElevated()
{
SPUser user = null;
SPSecurity.CodeToRunElevated elevatedSubmit = new
SPSecurity.CodeToRunElevated(delegate
{
user = SPContext.Current.Web.CurrentUser;
});
SPSecurity.RunWithElevatedPrivileges(elevatedSubmit);
return user;
}
//this is my Httpmodule:
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new
EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
// register handler for PreInit event
page.PreInit += new EventHandler(page_PreInit);
}
}
void page_PreInit(object sender, EventArgs e)
{ //user interception goes here}
Solución
ya respondido aquí:
obtener Nombre de usuario registrado actual para el usuario "Cuenta funciona como SISTEMA"
también me gusta notar:
public SPUser GetUserWithElevated()
{
SPUser user = null;
SPSecurity.CodeToRunElevated elevatedSubmit = new
SPSecurity.CodeToRunElevated(delegate
{
user = SPContext.Current.Web.CurrentUser;
});
SPSecurity.RunWithElevatedPrivileges(elevatedSubmit);
return
}
su ejecución bajo la cuenta del sistema;)
También me gusta tener en cuenta si la solución en mi otra respuesta no funciona, ya que supongo que no ... eso podría ser porque su cuenta se está ejecutando bajo una cuenta del sistema? Cuando inicia sesión en SharePoint, ¿qué nombre de usuario se muestra?
bajo módulo Esto debería funcionar:
HttpContext.Current.User.Identity.Name
Si eso no funciona, intente el método SPCONTEXT:
SPContext.Current.Web.CurrentUser.LoginName
Como dije, goto la URL en el navegador para primero asegurarse de que la cuenta su uso no esté establecida como una cuenta del sistema. RUNWITHELEVATED PRIV utiliza la cuenta de la Pool de App que también se muestra como Cuenta del sistema. En el código que proporcionó es que tres métodos ha intentado que todos proporcionen cuentas del sistema?
Debe probar con una cuenta ficticia para asegurarse de que no es la cuenta que usa actualmente es el problema
editar
Si utiliza la identidad de Windows para iniciar sesión a los usuarios en SharePoint de lo que puede hacer:
string getCurrentWindowsUserName = WindowsIdentity.GetCurrent().Name;
Http: // MSDN. Microsoft.com/en-us/library/vstudio/sfs49sw0(v=vs.100).aspx
Devolver diferentes tipos de cuentas depende de su configuración que tenga desde web.config a código como lo ha superado (elvated pr) a SharePoint Central Admin (Configuración de la cuenta como cuenta del sistema):
http://msdn.microsoft.com/en-us/library /aa302377.aspx
editar
OK, así que en función de su respuesta a continuación, puedo decir que el código está funcionando, ya que pasa el valor correcto. ¡El lugar está equivocado podría estar en dos lugares!
1) Goto Central Admin y verifique la política de usuario de la aplicación web. Haga clic en el usuario y vea si el TickBox se ejecuta como cuenta del sistema se verifica en un usuario que conoce, no se ejecuta como cuenta del sistema.
Tengo un sintimiento fuerte que lo anterior no es el problema, ya que puede tener cuentas locales creadas en SharePoint Sitio que también muestran el mismo problema? Así que se basa en esta presunción sigue el número 2 ..
2) GOTO IIS Manager -> Goto en la pregunta (haga clic en el sitio) -> En el lado derecho, haga clic en las opciones avanzadas:> Aparecerá una ventana emergente -> Asegúrese de que "Credenciales de ruta física" esté vacía. ... Haga clic en el botón '...' y debe obtener una ventana emergente -> Asegúrese de que haya marcado el usuario de la aplicación y haga clic en Aceptar!
¡Ojalá arriba debería resolver su problema!
Otros consejos
Intente seguir:
HttpContext.Current.User.Identity.Name