Question

J'ai besoin que les utilisateurs authentifiés devraient pouvoir ajouter anonymement des éléments à une liste, c'est-à-dire authentifié, mais le champ créé / modifié par champ ne doit pas afficher son nom.Je pourrais simplement masquer les champs à partir de la vue, mais le client ne souhaite même pas que les utilisateurs avec Site Coll Admin puis puissent voir qui a ajouté quel article.Je suppose que je pouvais en cela avec un récepteur d'événements qui modifie les champs en question pour stocker un compte de service, mais y a-t-il une autre façon de le faire sans impliquer le code personnalisé?

Merci d'avance.

Était-ce utile?

La solution

Vous pouvez le faire via l'administrateur central, mais je ne le recommanderais pas d'utiliser cette procédure pour tous les utilisateurs authentifiés.

  • Dans Central Admin, allez à la gestion des applications, puis cliquez sur 'Politique Pour une application Web 'sous "Sécurité de l'application".
  • Sélectionnez l'application Web SharePoint que vous téléchargez des documents sur
    et cliquez sur "Ajouter des utilisateurs".

  • Sélectionnez la zone désirée (ou "toutes les zones") et cliquez sur "Suivant".

  • Spécifiez votre nom de compte, cochez la case pour "Contrôle complet" et
    Cochez la case "Compte fonctionnant comme système", puis cliquez sur
    'Terminer'.

    Le mode recommandé est bien sûr d'utiliser le récepteur d'événement à la Liste et utilisation d'élément.systemupdate (). Voir le code ci-dessous:

    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 a deux surcharges, SystemUpDate () et SystemUpdate (Boolean). La deuxième surcharge vous permet de contrôler si une nouvelle version est créée en passant réellement. La valeur par défaut (aucun paramètre surcharge) n'est fausse - ne créez pas une nouvelle version.

Autres conseils

Je pense pour cela, vous pouvez utiliser la liste.Systemupdate ()

avec item.Unupdate (), nous mettons à jour les modifications apportées à l'élément de la liste.Est-ce que tout ce qu'il fait?Non, en interne, il met également à jour les champs "Modifiedby" et "Modifiedon", conformément à l'heure actuelle de l'utilisateur et du serveur actuel.Éventuellement, il met également à jour la version de l'élément si l'option Versioning est activée pour cette liste spécifique.

Donc, à tout moment si nous souhaitons de ne pas mettre à jour ces éléments supplémentaires, c'est-à-dire le "Modifiedon", "Modifiedby" et la "Version d'article", puis la solution est d'utiliser l'élément.Systemupdate () au lieu de l'élément.Mettre à jour().Cela vous aidera à mettre à jour uniquement les champs spécifiés dans vos blocs de code.

Vous pouvez toujours avoir un code exécuté sur l'élément optIndaté une partie d'un récepteur d'événement d'élément qui devrait exécuter dans un spsecurity.RunWithheLeVikedprivileges et effectuer une mise à jour avec elle ou utiliser quelque chose de similaire à ce sujet pour mettre à jour un "utilisateur factice" spécifique (chèquecode - je viens de l'écrire sur place!).

Vous auriez besoin de valider ce qui se passe si vous avez activé la version de version (s'il y a un cas pour cela!)

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top