从SP列表中快速获取用户有权查看的不同值

本文关键字:用户 列表 SP 获取 | 更新日期: 2023-09-27 18:26:49

我正在从SharePoint列表中提取不同的数据,并将其附加到下拉列表中。

起初我是这样做的,但发现它非常慢。

List<Data> years = new List<Data>();
foreach (SPListItem listitem in items)
{
     SPUser user = SPContext.Current.Web.CurrentUser;
     if (listitem.DoesUserHavePermissions(user, SPBasePermissions.Open))
     {
           string YearColumn = Convert.ToString(listitem["Year"])
           years.Add(new Data
           {
               Year = YearColumn
           });
     }
}
var distinctYear = years.GroupBy(x => x.Year, (key, group) => group.First());

此后,我修改了我的代码,希望它能更快地工作:

var items = listDocuments.GetItems(); 
var distinctYear = (from SPListItem i in items
                     select new
                     {
                          Year = i["Year"].ToString()                                                   
                     }).Distinct();

但是,这会返回用户无权查看的项目。如何使用GetItems方法,使其仅获取用户有权查看的项目?还有,有没有更快的方法可以做到这一点?这两种方式似乎都相当缓慢。

从SP列表中快速获取用户有权查看的不同值

var items = listDocuments.GetItems(); 
var distinctYear = (from SPListItem i in items
                 select new
                 {
                      Year = i["Year"].ToString()                                                   
                 }).Distinct();

此查询将只返回用户有权查看的项目,因为sharepoint保留权限级别。它以前不起作用的原因是因为我已经包含了这个

SPSecurity.RunWithElevatedPermissions()

在代码的前面。