SharePoint提供了一个强大的审核基础架构,用于对操作列表项,文档,或页面等用户行为进行审核。然而,我们必须通过编写自定义代码的方式利用这一审核架构。
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来返回某个时间段内的审核信息。
需要注意,读取审核日志是一个受限制的操作,需要站点管理员权限。所以,上面展示的代码只有在当前用户是站点管理员时才能成功运行。如果当前用户没有该权限,比如网站设计人员或读者,运行该代码就会报拒绝访问错误。如果您想给这些没有管理权限的用户显示审核信息,就需要用前一篇文章中
代码提升权限的方法,以便使上述代码可以顺利执行。