MSDN Visual系列:读取SharePoint审计日志中的信息

原文:http://msdn2.microsoft.com/en-us/library/bb466223.aspx

SharePoint提供了一个强大的审计基础架构,用于对操作列表项,文档,或页面等用户行为进行审核。然而,我们必须通过编写自定义代码的方式利用这一审计架构。因为默认情况下,没有哪个功能(feature)利用到它。前面的几篇MSDN Visual系列文章介绍了如何启用审计。这里我们要学习的是如何从审计日志中获取信息,以便将用户的活动信息展示或汇总到我们的自定义SharePoint解决方案中。

读取审计日志,要先从一个特定的网站集范围开始。在从当前网站集中读取审计信息前,我们首先要创建一个SPAuditQuery对象,并用一个SPSite对象初始化它。然后,我们必须在一个允许审计的对象(比如网站集本身)上调用GetEntries方法,并传递一个SPAuditQuery对象作参数。调用GetEntries会返回一个SPAuditEntryCollection对象。接下来,我们就可以通过在代码中用foreach循环来获取该审计日志中的实体(entry)信息了。

SPSite siteCollection = SPContext.Current.Site;
SPAuditQuery wssQuery 
= new SPAuditQuery(siteCollection);
SPAuditEntryCollection auditCol;
auditCol 
= siteCollection.Audit.GetEntries(wssQuery);
// enumerate through audit log and read entries
foreach (SPAuditEntry entry in auditCol) {
    
// inspect entry
}

上面的示例中调用了SPSite对象上的GetEntries方法,来获取整个网站集上的审计实体。我们也可以通过在网站集内的其他审计对象上调用GetEntries方法来缩小范围,比如在网站(SPWeb),列表或文档库(SPList),或列表项、文档(SPListItem)上。

在我们调用GetEntries方法前,还可以先为SPAuditQuery对象指定些参数,只要调用其本身的一些方法就可以。比如,我们可以调用AddEventRestiction以便审计查询只返回特定类型的审计实体,如只返回更新或删除操作相关的审计实体。我们可以调用RestrictToList方法返回特定的一个列表或文档库上的审计实体。我们可以调用RestrictToUser方法返回某用户相关的审计实体。甚至,我们可以调用SetRangeStart和SetRangeEnd来返回某个时间段内的审计信息。

需要注意,读取审计日志是一个受限制的操作,需要站点管理员权限。所以,上面展示的代码只有在当前用户是站点管理员时才能成功运行。如果当前用户没有该权限,比如网站设计人员或读者,运行该代码就会报拒绝访问错误。如果您想给这些没有管理权限的用户显示审计信息,就需要用前一篇文章中代码提升权限的方法,以便使上述代码可以顺利执行。

查看视频
posted @ 2007-06-08 08:02  Sunmoonfire  阅读(3951)  评论(0编辑  收藏  举报