Aggiungi elemento alla lista in modo anonimo (non come utente anonimo)?
-
09-12-2019 - |
Domanda
Ho un requisito che gli utenti autenticati dovrebbero essere in grado di aggiungere in modo anonimo elementi a un elenco, cioè sono autenticati ma il campo creato da / modificato dal campo non dovrebbe mostrare il loro nome.Potrei semplicemente nascondere i campi dalla vista ma il cliente non vuole nemmeno gli utenti con il sito Coll Admin per poter vedere chi ha aggiunto quale oggetto.Immagino che potrei a questo con un ricevitore di eventi che cambia i campi in questione per memorizzare un account di servizio ma c'è un altro modo di farlo senza coinvolgere il codice personalizzato?
Grazie in anticipo.
Soluzione
Puoi farlo tramite Central Admin ma non lo consiglierei di utilizzare questa procedura per tutti gli utenti autenticati.
- .
- Nell'amministratore centrale, andare alla gestione delle applicazioni, quindi fai clic su "Politica Per applicazione web 'sotto' sicurezza dell'applicazione '.
-
Seleziona l'applicazione Web SharePoint stai caricando i documenti su
e fai clic su "Aggiungi utenti". -
Seleziona la zona desiderata (o "Tutte le zone") e fai clic su "Avanti".
-
Specifica il nome dell'account, selezionare la casella per "Controllo completo" e
Seleziona la casella etichettata 'Account funziona come sistema', quindi fare clic su
'Fine'.Il modo Consigliato è ovviamente per utilizzare il ricevitore dell'evento al Elenco e usa elemento.systemupdate (). Vedi il codice qui sotto:
.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 ha due due sovraccarichi, SystemUpdate () e SystemUpdate (Boolean). Il secondo sovraccarico consente di controllare se una nuova versione è stata creata passando nel vero. Il valore predefinito (nessun sovraccarico di parametri) è falso: non creare una nuova versione.
Altri suggerimenti
Penso che per questo è possibile utilizzare l'elenco.systemupdate ()
Con Item.Update (), aggiorniamo le modifiche apportate all'elemento di elenco.È tutto ciò che fa?No, internamente aggiorna anche i campi "Modifiedydy" e "Modifiedon" secondo la corrente registrata all'utente e all'ora del server corrente.Opzionalmente aggiorna anche la versione dell'articolo se l'opzione di versioning è attivata per quell'elenco specifico.
Quindi, in qualsiasi momento se desideriamo non aggiornare queste cose extra, ad esempio il "modificato", "modificato" e la "versione elemento", quindi la soluzione per questo è utilizzare elemento.systemupdate () anziché.Aggiornare().Questo ti aiuterà a aggiornare solo i campi specificati all'interno dei blocchi di codice.
È possibile avere sempre un codice in esecuzione sulla parte ItemUpdata di un ricevitore evento dell'oggetto che dovrebbe essere eseguito in uno spsecurity.runwitelevatedPrileges ed eseguire un aggiornamento con esso o utilizzare qualcosa di simile a questo per aggiornare con uno specifico "User Dumy User" (assegnoCodice - L'ho appena scritto sul posto!).
Dovresti convalidare ciò che accade se hai abilitato il controllore (se c'è un caso per questo!)
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();
}
.