1

我正在创建一个 SharePoint 应用程序,并希望尽可能多地以正确的方式做事。

我正在站点定义中部署一系列列表,并且我想将数据访问锁定到一系列 Get() 方法以维护约定。

我的一些列表在列表定义中设置了 SecurityBits="22",因为我希望仅在 UI 中修改列表项条目。

我想避免滥用SPSecurity.RunWithElevatedPrivileges. 我还想回避SPSecurity.RunWithElevatedPrivileges你不能在代表中拥有return功能的限制。

这似乎是执行此操作的好方法。如果您正在调用列表以获取具有正常安全性的列表项,则可以调用var PostList = CoreLists.Posts. 如果您需要使用提升的权限调用同一个列表,您可以调用var PostList = CoreLists.SystemAccount.Posts

这是一个好方法吗?

public static class CoreLists
{
    public static SPList Posts()
    {
        return SPContext.Current.Web.GetList(SPContext.Current.Web.ServerRelativeUrl + "/lists/CommunityPost");
    }
    public static class SystemAccount
    {
        public static SPList Posts()
        {
            using (var elevatedSite = new SPSite(SPContext.Current.Site.ID, SPContext.Current.Site.SystemAccount.UserToken))
            using (var web = elevatedSite.OpenWeb())
                return web.GetList(web.ServerRelativeUrl + "/lists/CommunityPost");
        }
    }
}
4

1 回答 1

1

我认为只要您的安全上下文有意义(即安全性最低的用户可以使用这些方法访问列表项),第一类看起来就很好。我很好奇第二个中的 using 语句如何影响调用它的代码。

ElevatePriveleges 的问题是,有时当您拥有广泛使用的数据访问代码时,如果您不想直接在 SharePoint UI 中授予他们对列表的访问权限,但想要拥有在其上下文中执行的代码访问用户控件等的列表项。

需要记住的几件事: 1. 始终注意 SharePoint 中的列表访问代码的内存泄漏。在您的课程中,您处理了这两种情况以及处理任何 SPRequest 处理。2. 你几乎不想在你的代码中使用 SPList.Items。如果您以这种方式显示列表并且您不管理调用列表的代码,您可能会遇到较大列表的性能问题,因为调用 .Items 属性而不是特定查询会为每个项目加载每个项目和字段那个清单。

希望这可以帮助

于 2012-08-16T02:23:04.613 回答