我有一个要求,经过身份验证的用户应该能够将物品匿名添加到列表中,即它们被认证,但是由字段创建的/修改字段不应显示其名称。我可以只隐藏视图中的字段,但客户端甚至没有希望使用Site Coll Admin的用户能够看到谁添加了什么项目。我想我可以通过一个事件接收器来改变有问题的字段来存储服务账户,但是在不涉及自定义代码的情况下还有另一种方式做到这一点吗?

提前感谢。

有帮助吗?

解决方案

您可以通过Central Admin进行,但我不建议它为所有经过身份验证的用户使用此过程。

  • 在Central Admin中,转到应用程序管理,然后单击“策略” 对于Web应用程序'在“应用程序安全”下。
  • 选择您将文档上传到的SharePoint Web应用程序 并单击“添加用户”。

  • 选择所需的区域(或'所有区域'),然后单击“下一步”。

  • 指定您的帐户名称,选中“完全控制”的框,以及
    选中标记为“帐户作为系统运行”的框,然后单击
    '完成'。

    推荐方式当然是使用事件接收器到 列表和使用Item.Systemupdate()。请参阅下面的代码:

    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有两个两个过载,systemupdate()和systemupdate(boolean)。第二个过载允许您控制新版本是否通过TRUE创建。默认(无参数过载)是假的 - 不要创建一个新版本。

其他提示

我想你可以使用list.systemupdate()

使用Item.Update(),我们更新到列表项所做的更改。这一切都是什么?不,在内部它还根据用户和当前服务器时间的当前更新“修改”和“修改”和“修改”字段。可选地,如果已打开该特定列表,则更新项目的版本。

所以,如果我们希望不要更新这些额外的东西,即“modifiedon”,“修改”和“项目版本”,那么它的解决方案是使用Item.Systemupdate()而不是项目。更新()。这将帮助您更新仅在代码块中指定的字段。

您可以始终在项目事件接收器的itemupdated部分上运行的代码,该部分应该在spsecurity.runwithelevateprivileges中运行并使用它执行更新,或者使用类似于此类似的内容来使用特定的“虚拟用户”更新(检查代码 - 我刚刚在现场写它!)。

您需要验证是否启用了版本控制(如果有此情况!)

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

许可以下: CC-BY-SA归因
scroll top