我正在为SharePoint 2010构建Web部件,并且当我执行以下代码时,我发现非管理员用户收到Access Denied
错误消息(错误在最后一行引发):
SPAuditQuery wssQuery = new SPAuditQuery(web.Site);
wssQuery.RestrictToUser(web.CurrentUser.ID);
wssQuery.AddEventRestriction(SPAuditEventType.View);
wssQuery.RestrictToList(SPContext.Current.List);
SPAuditEntryCollection auditCol;
auditCol = web.Site.Audit.GetEntries(wssQuery);
如何让非管理员用户从Web部件访问此日志?因为我需要通过非管理员用户进行过滤,即使当时非管理员用户已登录。
答案 0 :(得分:1)
.NET Reflector告诉我SPAuditEntryCollection GetEntries(SPAuditQuery query)
方法在尝试检索数据之前执行以下检查:
if (!this.m_Web.CurrentUser.IsSiteAdmin)
{
throw new UnauthorizedAccessException();
}
您可以考虑:
直接查询dbo.AuditData
表(直接访问SharePoint数据库通常不鼓励,但您只能进行只读访问,因此不会导致任何问题),
创建自定义SharePoint Web服务 - 这应该很简单,因为它需要做的只是执行GetEntries
方法并返回结果。