Sharepoint 2010,根据当前用户确定对SPListItem的访问

时间:2011-06-28 02:06:21

标签: c# security sharepoint-2010 caml splistitem

我正在使用CAML Queryy获取所有包含ContentType的列表项,但我还需要知道当前用户是否有权查看该文件。

那部分我不知道如何检查它。

我使用此exmpla作为如何获取与内容类型相关的项目的参考。

https://sharepoint.stackexchange.com/questions/14566/how-to-find-all-documents-of-a-certain-content-type

感谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,我们的代码会在用户执行Web请求时模拟运行。因此,CAML查询返回的项目已经过安全修整。意思是,结果集仅包含允许当前用户“查看”的项目。

在某些情况下,您需要使用系统priveliges执行CAML查询。为此,必须使用系统帐户令牌打开SPSite对象:

using (SPSite elevatedSite = new SPSite("http://server-url", SPUserToken.SystemAccount))
{
  // open web; list; 
  // execute caml query with system account priveliges.
}

在这种情况下,您可以使用方法DoesUserHavePermissions检查/确保某个列表项的权限:

SPListItem item = //...
if (item.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser, SPBasePermissions.ViewListItems))
{
  // futher actions if user has permission goes here.
}

需要注意的重要一点是,您必须使用DoesUserHavePermissions参数调用SPUser的重载。超载不会使用网站的“当前用户”。自从使用系统帐户令牌打开网站以来,系统帐户是哪个。