我正在使用CAML Queryy获取所有包含ContentType的列表项,但我还需要知道当前用户是否有权查看该文件。
那部分我不知道如何检查它。
我使用此exmpla作为如何获取与内容类型相关的项目的参考。
感谢。
答案 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
的重载。超载不会使用网站的“当前用户”。自从使用系统帐户令牌打开网站以来,系统帐户是哪个。