2011-06-28 63 views
0

我正在使用CAML Queryy来获取所有列表项,它们都是ContentType,但我也需要知道当前用户是否有权查看该文件。Sharepoint 2010,基于当前用户确定对SPListItem的访问

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

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

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

感谢。

+0

尝试访问资源*,同时冒充用户*。如果您没有获得授权,SP会通知您。 – 2011-06-28 02:10:38

回答

1

在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。没有使用的超载将使用该站点的“当前用户”。系统帐户令牌打开后,系统帐户是哪个系统帐户。

+0

感谢ite.DoesHavePermission为我工作。 –

+0

其他问题,我需要做同样的事情,但要求,它的theres再次做到这一点??,谢谢。 –

+0

Stefan上面的答案不正确,因为当页面被匿名访问时会导致错误。因为'SPContext.Current.Web.CurrentUser为null'。有人有解决这个问题的答案吗? – DaRula

相关问题