Pregunta

Todos -

Estoy usando WSS 3.0. Actualmente, Recursos Humanos cargará el currículum vitae interno de la empresa de un empleado en una biblioteca de documentos en nuestro sitio, pero por razones de privacidad, debemos restringir el acceso a esa biblioteca de documentos, lo que obliga a los usuarios a pasar por Recursos Humanos cada vez que quieran actualizar su currículum.

Mi idea es crear una lista con archivos adjuntos habilitados que permita a los usuarios solo ver / editar sus propios elementos, y luego otorgar permiso de Recursos Humanos para administrar todas las entradas. Esto funciona con la excepción de que RR.HH. necesitará crear el elemento de la lista inicial y adjuntar el currículum, lo que significa que el elemento de la lista será '' creado por {hr} ''. y no visible / editable por el usuario final cuyo currículum está adjunto.

Cualquier idea sobre cómo puedo permitir que RRHH modifique el " creado por " campo de carga para que los usuarios finales vean y puedan editar su currículum, o hacer esto de otra manera?

¡Gracias!

¿Fue útil?

Solución

Cree una biblioteca de documentos para guardar el currículum. Luego proporcione al departamento de recursos humanos (grupo de usuarios de SharePoint) "leer / escribir todo" permisos en la biblioteca, le dan a todos los demás leer / escribir el suyo " derechos. Cree un tipo de contenido llamado " Reanudar " basado en el tipo de contenido de documento listo para usar. Luego, agregue un campo que contenga el Empleado (campo SPUser) a quien el currículum se refiere al tipo de contenido (y cualquier otro campo requerido, es decir, nombre, dirección, etc.). Haga que HR complete esto correctamente al crear el elemento de lista (haga que los campos sean obligatorios).

Luego, escriba un itemeventreceiver vinculado al tipo de contenido que acaba de crear y anule el evento ItemUpdated.

El código sería algo similar a lo siguiente:

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();
         }
       }
     }
   });
}

puede vincular el ItemEventReceiver usando un FeatureReceiver al tipo de contenido de esta manera:

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();

Otros consejos

¿Por qué no usar una biblioteca de documentos para los currículums? (en lugar de una lista con archivos adjuntos). Puede dar lectura / escritura completa de recursos humanos a todos los documentos incluidos, y el propietario del currículum tendrá permisos para contribuir solo a su propio currículum.

Encontré una forma de cambiar el campo Creado por usando SharePoint Designer para crear un flujo de trabajo.

  1. Cree un campo ficticio en su lista con un nombre fácil de detectar, p. XYZZY Conviértalo en una "persona o grupo" campo.
  2. En SharePoint Designer, cree un flujo de trabajo para su lista. Permitir el inicio manual y comenzar automáticamente cuando se crea un nuevo elemento.
  3. Acciones - > Establecer campo en elemento actual - > Establezca XYZZY en el campo de su lista que contiene la cuenta de usuario que desea poner en Creado por.
  4. Haga clic en Finalizar
  5. Ahora, abra su archivo de flujo de trabajo .xoml con el Bloc de notas. Reemplazar " XYZZY " con " Autor " ;. Guarde el archivo .xoml.
  6. Abra el flujo de trabajo en Designer. Haga clic en Finalizar para que se vuelva a procesar con el nuevo código.
  7. Eliminar el campo ficticio de la lista.
  8. Ejecute el flujo de trabajo en cada elemento existente en su lista. Los nuevos elementos se autocorregirán automáticamente.

Con una pantalla de carga personalizada, puede cambiar el contexto del usuario actual antes de realizar la carga. Requiere buscar el token de usuario usando algo como lo siguiente (estos son fragmentos de código de trabajo con manejo de errores y otras cosas eliminadas). Tenga en cuenta que AsegúreseUser requerirá que el usuario actual sea básicamente un administrador / propietario.

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;
}

Tuve una situación similar (migración a sharepoint) en la que tuve que agregar un archivo con el usuario administrador a una biblioteca de documentos y luego "cambiar". Los usuarios. Lo hice así, podría ayudarte un poco:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top