我正在使用CAML Queryy来获取所有列表项,它们都是ContentType,但我也需要知道当前用户是否有权查看该文件。Sharepoint 2010,基于当前用户确定对SPListItem的访问
这部分我不知道如何检查它。
我使用此exmpla作为如何获取与内容类型相关的项目的参考。
感谢。
我正在使用CAML Queryy来获取所有列表项,它们都是ContentType,但我也需要知道当前用户是否有权查看该文件。Sharepoint 2010,基于当前用户确定对SPListItem的访问
这部分我不知道如何检查它。
我使用此exmpla作为如何获取与内容类型相关的项目的参考。
感谢。
在SharePoint中默认情况下,我们的代码会以执行Web请求的用户身份运行。因此CAML查询返回的项目已经被安全修剪。意思是,结果集只包含当前用户被允许“看到”的项目。
在某些情况下,您需要使用系统权限执行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
。没有使用的超载将使用该站点的“当前用户”。系统帐户令牌打开后,系统帐户是哪个系统帐户。
感谢ite.DoesHavePermission为我工作。 –
其他问题,我需要做同样的事情,但要求,它的theres再次做到这一点??,谢谢。 –
Stefan上面的答案不正确,因为当页面被匿名访问时会导致错误。因为'SPContext.Current.Web.CurrentUser为null'。有人有解决这个问题的答案吗? – DaRula
尝试访问资源*,同时冒充用户*。如果您没有获得授权,SP会通知您。 – 2011-06-28 02:10:38