我正在创建一个 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");
}
}
}