Pergunta

Todos -

Eu estou usando WSS 3.0. Atualmente, HR irá carregar currículo interno da empresa de um funcionário para uma biblioteca de documentos em nosso site, mas por razões de privacidade, que deve, então, restringir o acesso a essa biblioteca de documentos, o que força os usuários para, em seguida, passar por HR cada vez que deseja atualizar seu currículo.

Meu pensamento é criar uma lista com anexos habilitado que permite que os usuários a apenas ver / editar seus próprios itens, e em seguida, dar permissão de RH para gerenciar todas as entradas. Isso funciona com a ressalva de que HR será necessário criar o item da lista inicial e anexar o currículo, o que significa que o item da lista será "criado por {hr}" e não / editável visível pelo usuário final cujo currículo está anexado.

Algumas ideias sobre como eu pode permitir HR para modificar o "criado por" campo de upload, para que os usuários finais irão ver e pode editar seu currículo, ou ir sobre isso de uma maneira diferente?

Obrigado!

Foi útil?

Solução

Criar uma biblioteca de documentos para manter o currículo. Em seguida, dar o departamento de RH (grupo de usuários SharePoint) "ler / escrever todos os" permissões na biblioteca, a dar toda a gente ler / escrever seus próprios" direitos. Criar um tipo de conteúdo chamado 'Resume', baseado no out-of-the- caixa Document tipo de conteúdo. em seguida, adicione um campo que contém o (campo SPUser) Employee quem as preocupações currículo para o tipo de conteúdo (e quaisquer outros campos necessários, ou seja, nome, endereço etc.). Tem HR preencher esta corretamente ao criar o listitem (fazer os campos são obrigatórios).

Em seguida, escrever uma itemeventreceiver ligado ao tipo de conteúdo que você acabou de criar e substituir o evento ItemUpdated.

O código seria algo como o seguinte:

public override void ItemUpdated(SPItemEventProperties properties)
{
  SPSecurity.RunWithElevatedPrivileges(delegate
  {
    using (SPWeb web = properties.OpenWeb())
    {
       web.AllowUnsafeUpdates = true; 
       var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
       if (item != null)
       {
         if (item.Fields.ContainsField("Employee"))
         {
           item["Author"] = item["Employee"]; 
           // Author is the internal name of the Created by field, 
           // always use Internal Names!
           DisableEventFiring();
           item.SystemUpdate();
           EnableEventFiring();
         }
       }
     }
   });
}

Você pode vincular a ItemEventReceiver usando um FeatureReceiver ao tipo de conteúdo assim:

SPContentType docCt = web.ContentTypes[new SPContentTypeId("CONTENTYPE ID GOES HERE")];
docCt.EventReceivers.Add(SPEventReceiverType.ItemUpdated, "ASSEMBLYNAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=TOKEN", "FULLY QUALIFIED CLASSNAME");
docCt.Update();

Outras dicas

Por que não usar uma biblioteca de documentos para os currículos? (Em vez de uma lista w / anexos.) Você pode dar HR completo de leitura / gravação para todos os documentos dentro, e o proprietário do currículo terá contribuir permissões para apenas o seu próprio currículo.

Eu encontrei uma maneira de mudar o campo Criado por usando o SharePoint Designer para criar um fluxo de trabalho.

  1. Criar um campo fictício em sua lista com um nome para fácil local, por exemplo, XYZZY. Torná-lo um campo "pessoa ou grupo".
  2. No SharePoint Designer, crie um fluxo de trabalho para a sua lista. Permitir início manual e iniciar automaticamente quando novo item é criado.
  3. Ações -> Set campo no item atual -.> Set XYZZY para o campo em sua lista que contém a conta de usuário que você deseja colocar em Criado por
  4. Clique em Concluir
  5. Agora, abra o arquivo .xoml fluxo de trabalho com o bloco de notas. Substituir "XYZZY" com "Autor". Salve o arquivo .xoml.
  6. Abra o fluxo de trabalho em Designer. Clique em Concluir para que ele reprocessa com o novo código.
  7. Exclua o campo fictício da lista.
  8. Execute o fluxo de trabalho em cada item existente na sua lista. Novos itens se auto-corrigir automaticamente.

Com uma tela de upload personalizado que você poderia mudar o contexto do usuário atual antes de fazer o upload. Exige olhando para cima o usuário símbolo usando algo como o seguinte (estes são trechos de código trabalhando com manipulação de erro e outras coisas removido). Note-se que EnsureUser exigirá que o usuário atual basicamente ser um administrador / proprietário.

using (SPSite site = GetImpersonatedSite(runAsUser))
{
    using (SPWeb web = site.OpenWeb())
    {
        // Do stuff here
    }
}

private SPSite GetImpersonatedSite(string username)
{
    user = SPContext.Current.Web.EnsureUser(username);
    SPSite site = new SPSite(SPContext.Current.Web.Url, user.UserToken);
    return site;
}

Eu tinha uma situação semelhante (migração para o SharePoint), onde eu tive que adicionar um arquivo com o usuário admin para uma biblioteca de doc e, em seguida, "mudar" os usuários. Eu fiz isso como esta, pode ajudá-lo um pouco:

using (var root = site.RootWeb)
 {
   var users = root.SiteUsers;
   var user = users["domain\username"];
   file.Item[SPBuiltInFieldId.Created_x0020_By] = user.ID;
   file.Item[SPBuiltInFieldId.Modified_x0020_By] = user.ID;
   file.Item.UpdateOverwriteVersion();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top