Pergunta

Como posso obter o usuário conectado no SharePoint em um módulo adicionado?

Eu tentei os seguintes códigos, mas sempre recebo a conta do 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}
Foi útil?

Solução

já respondi aqui:

Obtenha o nome de usuário registrado atual para o usuário "A conta opera como sistema"

também gostaria de observar:

  public SPUser GetUserWithElevated()
  {
    SPUser user = null;

    SPSecurity.CodeToRunElevated elevatedSubmit = new 
    SPSecurity.CodeToRunElevated(delegate
    {

         user = SPContext.Current.Web.CurrentUser;
    });
    SPSecurity.RunWithElevatedPrivileges(elevatedSubmit);

    return 
  }

você está executando na conta do sistema;)

também gostaria de observar se a solução na minha outra resposta não funciona, pois presumo que não ...isso pode ser porque sua conta está sendo executada em uma conta do sistema?quando você faz login no sharepoint, qual nome de usuário é exibido?

no módulo isso deve funcionar:

HttpContext.Current.User.Identity.Name

se isso não funcionar, tente o método spcontext:

SPContext.Current.Web.CurrentUser.LoginName

como eu disse, vá para o URL do navegador para primeiro ter certeza de que a conta que você está usando não está definida como uma conta do sistema.Runwithelevated priv usa a conta do pool de aplicativos que também aparece como conta do sistema!No código que você forneceu há três métodos que você tentou e que fornecem contas do sistema?

Você precisa testar com uma conta fictícia para ter certeza de que o problema não é a conta que você está usando atualmente.

EDITAR

se você estiver usando a identidade do Windows para fazer login de usuários no SharePoint, você pode fazer:

string getCurrentWindowsUserName = WindowsIdentity.GetCurrent().Name;

http://msdn.microsoft.com/en-us/library/vstudio/sfs49sw0(v=vs.100).aspx

o retorno de diferentes tipos de conta depende de suas configurações do web.config para o código acima (priv elevado) para o administrador central do sharepoint (definindo a conta como conta do sistema):

http://msdn.microsoft.com/en-us/library/aa302377.aspx

EDITAR

ok, com base na sua resposta abaixo, posso dizer que o código está funcionando ao passar o valor correto!o lugar onde está dando errado pode ser em dois lugares!

1) vá para o administrador central e verifique a política de usuário do aplicativo da web.Clique no usuário e veja se a caixa de seleção executar como conta do sistema está marcada em um usuário que você sabe que não deve ser executado como conta do sistema.

Tenho uma forte sensação de que o problema acima não é o problema, pois você pode ter contas locais criadas no site do SharePoint que também apresentam o mesmo problema.então, com base nesta presunção, siga o número 2.

2) vá para o gerenciador iis -> vá para o site em questão (clique no site) -> no lado direito clique em Opções avançadas -> um pop-up aparecerá -> certifique-se de que as "credenciais do caminho físico" estejam vazias....clique no botão '...' e você deverá receber um pop-up -> certifique-se de que o usuário do aplicativo esteja marcado e clique em ok!

espero que acima resolva seu problema!

Outras dicas

Tente seguir:

HttpContext.Current.User.Identity.Name
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top