Pergunta

Eu tenho um requisito de que usuários autenticados possam adicionar itens anonimamente a uma lista, ou seja,eles são autenticados, mas o campo Criado por/Modificado por não deve exibir seus nomes.Eu poderia simplesmente ocultar os campos da visualização, mas o cliente nem mesmo deseja que os usuários com administrador do site possam ver quem adicionou qual item.Acho que poderia fazer isso com um receptor de eventos que altera os campos em questão para armazenar uma conta de serviço, mas existe outra maneira de fazer isso sem envolver código personalizado?

Desde já, obrigado.

Foi útil?

Solução

Você pode fazer isso através do Central Admin, mas eu não recomendaria usar este procedimento para todos os usuários autenticados.

  • No Central Admin, vá para o gerenciamento de aplicativos e clique em 'Política de aplicativo da Web' em 'Securalização do Aplicativo'.
  • Selecione o aplicativo Web do SharePoint para o qual você está carregando documentos
    e clique em 'Adicionar usuários'.

  • Selecione a zona desejada (ou 'Todas as zonas') e clique em 'Avançar'.

  • Especifique o nome da sua conta, marque a caixa 'Controle total' e
    marque a caixa 'A conta opera como sistema' e clique em
    'Terminar'.

O recomendado É claro que o caminho é usar o receptor de evento na lista e usar o item.systemupdate ().Veja o código abaixo:

public override void ItemAdded
                          (SPItemEventProperties properties)
{
   SPUser adminUser =
       properties.Web.EnsureUser("GEEKTRAINER\\charrison");
   using (SPSite site =
       new SPSite(properties.WebUrl, adminUser.UserToken))
   using (SPWeb web = site.OpenWeb()) {
     SPList list = web.Lists[properties.ListId];
     SPListItem item = list.GetItemById(properties.ListItemId);

     item.BreakRoleInheritance(true);
     item.SystemUpdate();
   }


 }

SystemUpdate tem duas sobrecargas, SystemUpdate() e SystemUpdate(boolean).A segunda sobrecarga permite controlar se uma nova versão será criada passando true.O padrão (sem sobrecarga de parâmetros) é falso – não crie uma nova versão.

Outras dicas

Eu acho que por isso você pode usar a lista.SystemUpdate ()

com item.update (), atualizamos as alterações feitas no item da lista.Isso é tudo o que faz?Não, internamente, também atualiza os campos "modifiedby" e "modificadeon" de acordo com o horário de usuário atualizado atualizado e atual.Opcionalmente, também atualiza a versão do item se a opção de versão estiver ativada para essa lista específica.

Então, em qualquer momento, se desejarmos não atualizar essas coisas extras, ou seja, o "modificador", "modifiedby" e a "versão do item", então a solução para ele é usar item.SystemUpdate () em vez de item.Atualizar().Isso ajudará você a atualizar apenas os campos especificados em seus blocos de código.

Você sempre pode ter um código em execução na parte ItemUpdated de um receptor de evento de item que deve ser executado em um SPSecurity.RunWithElevatedPrivileges e realizar uma atualização com ele, ou usar algo semelhante a isto para atualizar com um "usuário fictício" específico (verifique o código - i acabei de escrever na hora!).

Você precisaria validar o que acontece se o controle de versão estiver ativado (se houver um caso para isso!)

using(SPSite currentSite = new SPSite(properties.Site.Url))
{ 
    SPWeb oWeb = oSite.OpenWeb();

    SPList oList = oWeb.Lists["TestCustomList"];
    SPListItemCollection oListCollection = oList.Items;
    foreach (SPListItem oListItem in oListCollection)
    {
        SPFieldUserValue oUser =
        new SPFieldUserValue(
            oWeb,
            oWeb.CurrentUser.ID,
            oWeb.CurrentUser.LoginName);

        // or you can hard code the value like this
        SPFieldUserValue oUser = new SPFieldUserValue(oWeb, 14, "Dummy User");
        oListItem["Author"] = oUser;//created by column value = "14;#DummyUser"
        oListItem["Editor"] = oUser;//modified by column value = "14;#DummyUser"              
        oListItem.Update();              
    }         
    oWeb.Update();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top