Pregunta

Tengo un requisito de que los usuarios autenticados deberían poder agregar artículos de forma anónima a una lista, es decir, son autenticados, pero el campo creado por / modificado por el campo no debe mostrar su nombre.Podría simplemente ocultar los campos desde la vista, pero el cliente ni siquiera desea que los usuarios con Site Coll Admin puedan ver quién agregó qué artículo.Supongo que podría con esto con un receptor de eventos que cambie los campos en cuestión para almacenar una cuenta de servicio, pero ¿hay otra forma de hacerlo sin involucrar el código personalizado?

gracias de antemano.

¿Fue útil?

Solución

Puede hacerlo a través del administrador central, pero no lo recomendaría, utilice este procedimiento para todos los usuarios autenticados.

  • en el administrador central, vaya a Administración de aplicaciones, luego haga clic en 'Política para la aplicación web 'bajo' Seguridad de la aplicación '.
  • Seleccione la aplicación web de SharePoint que está cargando documentos a
    y haga clic en 'Agregar usuarios'.

  • Seleccione la zona deseada (o 'todas las zonas') y haga clic en 'Siguiente'.

  • Especifique el nombre de su cuenta, marque la casilla para 'Control completo' y
    Marque la casilla etiquetada 'Cuenta funciona como sistema', luego haga clic en
    'Finalizar'.

    La recomendada es, por supuesto, usar el receptor del evento a la Lista y use el elemento.systemUpdate (). Consulte el código a continuación:

    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 tiene dos dos sobrecargas, SystemUpdate () y SystemUpdate (Boolean). La segunda sobrecarga le permite controlar si se crea una nueva versión pasando en VERDADERO. El valor predeterminado (sin sobrecarga de parámetros) es falso, no cree una nueva versión.

Otros consejos

Creo que para esto puede usar la lista.systemApdate ()

con item.Update (), actualizamos los cambios que se realizan al elemento de la lista.¿Es eso todo lo que hace?No, internamente, también actualiza los campos "modificados" y "modificación" según la hora actual de servidor registrada y actual.Opcionalmente, también actualiza la versión del artículo si la opción de visualización está activada para esa lista específica.

Por lo tanto, en cualquier momento, si deseamos no actualizar estas cosas adicionales, es decir, la "modificación", "modificado" y la "Versión de elementos", entonces la solución para ello es usar el elemento.systemdate () en lugar del elemento.Actualizar().Esto le ayudará a actualizar solo aquellos campos que se especifican dentro de sus bloques de código.

Siempre podría tener un código que se ejecuta en la parte itemupDated formada de un receptor de eventos del artículo que debe ejecutarse en un SPSECURITY.RUNWITHELEVATEDPRIVILGES y realice una actualización con él, o utilice algo similar a esto para actualizarse con un "usuario ficticio" específico (chequeCódigo: ¡acabo de escribirlo en el lugar!).

Debería validar lo que sucede si tiene habilitado el versionaje (¡si hay un caso para eso!)

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