读书人

在 SharePoint 中自定义复核

发布时间: 2012-09-21 15:47:26 作者: rapoo

在 SharePoint 中自定义审核
public override void FeatureActivated(SPFeatureReceiverProperties properties) { using (SPSite siteCollection = (SPSite)properties.Feature.Parent) { SPWeb TopLevelSite = siteCollection.RootWeb; // Turn on auditing flags. siteCollection.Audit.AuditFlags = SPAuditMaskType.All; siteCollection.Audit.Update(); // create permission levels SPRoleDefinition AuditorPermissions, AuditManagerPermissions; AuditorPermissions = CreatePermissionLevel( "Auditor Permissions", "Can view audit logs", "Read"); AuditManagerPermissions = CreatePermissionLevel( "Audit Manager Permissions", "Can configure auditing support", "Design", SPBasePermissions.ManageWeb); // create Auditors group SPGroup Auditors = CreateGroup( "Auditors", "for users who need to audit user activity"); SPRoleAssignment AuditorRoleAssignment = new SPRoleAssignment(Auditors); AuditorRoleAssignment.RoleDefinitionBindings.Add(AuditorPermissions); TopLevelSite.RoleAssignments.Add(AuditorRoleAssignment); // create Audit Managers group SPGroup AuditManagers = CreateGroup( "Audit Managers", "for users who configure WSS auditing support"); SPRoleAssignment AuditManagerRoleAssignment = new SPRoleAssignment(AuditManagers); AuditManagerRoleAssignment.RoleDefinitionBindings.Add( AuditManagerPermissions); TopLevelSite.RoleAssignments.Add(AuditManagersRoleAssignment);}?

?

?

<!-- Add Link to Site Setting Page --><CustomAction Id="SiteActionsToolbar" GroupId="SiteCollectionAdmin" Location="Microsoft.SharePoint.SiteSettings" Sequence="0" Rights="ManageWebs" Title="Audit Management" > <UrlAction Url="~sitecollection/_layouts/AuditingDemo/AuditConfig.aspx"/></CustomAction>?SPSite siteCollection = this.Site;if (radAuditingOff.Checked) { siteCollection.Audit.AuditFlags = SPAuditMaskType.None;}if (radAuditingOnFull.Checked) { siteCollection.Audit.AuditFlags = SPAuditMaskType.All;}if (radAuditingOnSelective.Checked) { siteCollection.Audit.AuditFlags = GetSelectiveAuditingFlags();}siteCollection.Audit.Update();?private SPAuditMaskType GetSelectiveAuditingFlags() { SPAuditMaskType AuditFlags = SPAuditMaskType.None; if (chkAuditView.Checked) { AuditFlags |= SPAuditMaskType.View; } if (chkAuditUpdate.Checked) { AuditFlags |= SPAuditMaskType.Update; } // Repeat for Copy, Move, Delete, Undelete, CheckIn, CheckOut, // Search, Workflow, SecurityChange, ProfileChange, SchemaChange return AuditFlags;}?<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <!-- Add Command to Site Actions Dropdown --> <CustomAction Id="AuditingSupport" GroupId="SiteActions" Location="Microsoft.SharePoint.StandardMenu" Sequence="1000" Control/></Elements>?public class SiteActionsCustomSubMenu : WebControl { protected override void OnLoad(EventArgs e) { this.EnsureChildControls(); base.OnLoad(e); } protected override void CreateChildControls() { SPSite siteCollection = SPContext.Current.Site; SPWeb site = SPContext.Current.Web; SPUser user = site.CurrentUser; // provide security trimming if (IsCurrentUserInGroup("Auditors") || IsCurrentUserInGroup("Audit Managers") || user.IsSiteAdmin) { string siteCollectionPath = siteCollection.Url; if (!siteCollectionPath.EndsWith(@"/")) siteCollectionPath += "/"; SubMenuTemplate smt = new SubMenuTemplate(); smt.Text = "Auditing Support"; smt.ID = "mnuAuditingSupport"; smt.Description = "Configure and View Auditing"; smt.ImageUrl = siteCollectionPath + @"_layouts/images/AuditingDemo/AfricanPith32.gif"; smt.Sequence = 400; MenuItemTemplate mit1 = new MenuItemTemplate(); mit1.ID = "mnuAuditLog"; mit1.Text = "Audit Log"; mit1.Description = "Inspect Audit Entries"; mit1.Sequence = 401; mit1.ClientOnClickNavigateUrl = siteCollectionPath + "_layouts/AuditingDemo/AuditLogViewer.aspx"; mit1.ImageUrl = siteCollectionPath + @"_layouts/images/AuditingDemo/Binoculars32.gif"; // add menu item to Controls collection smt.Controls.Add(mit1); // perform extra security trimming for menu for AuditConfig.aspx if (IsCurrentUserInGroup("Audit Managers") || user.IsSiteAdmin) { MenuItemTemplate mit2 = new MenuItemTemplate(); mit2.ID = "mnuAuditingConfiguration"; mit2.Text = "Auditing Configuration"; mit2.Description = "Enable/Disable Auditing"; mit2.Sequence = 402; mit2.ClientOnClickNavigateUrl = siteCollectionPath + "_layouts/AuditingDemo/AuditConfig.aspx"; mit2.ImageUrl = siteCollectionPath + @"_layouts/images/AuditingDemo/Compass32.gif"; smt.Controls.Add(mit2); } this.Controls.Add(smt); } } private bool IsCurrentUserInGroup(string GroupName) { SPWeb site = SPContext.Current.Web; foreach (SPGroup group in site.SiteGroups) { if (group.Name.Equals(GroupName)) { return group.ContainsCurrentUser; } } throw new ApplicationException("There is no group named " + GroupName); }}?
?SPSite SiteCollection = SPContext.Current.Site; SPAuditQuery wssQuery = new SPAuditQuery(SiteCollection); SPAuditEntryCollection auditCol = SiteCollection.Audit.GetEntries(wssQuery); foreach (SPAuditEntry entry in auditCol) { // enumererate through each audit entry }?<CustomAction Id="ItemAuditing.ECBItemMenu" RegistrationType="ContentType" RegistrationId="0x01" ImageUrl="/_layouts/images/GORTL.GIF" Location="EditControlBlock" Sequence="300" Title="View Audit History"> <UrlAction Url= "~site/_layouts/AuditingDemo/ItemAudit.aspx?ItemId= {ItemId}&ListId={ListId}"/> </CustomAction>?
?图 5 ItemAudit.aspx 显示特定项的审核条目 与 AuditLogViewer.aspx 页类似,ItemAudit.aspx 的源代码使用 SPAuditQuery 对象检索审核日志数据和 DataTable(用审核日志条目数据填充,然后绑定到 SPGridView 控件)。主要的区别是 ItemAudit.aspx 的源代码先调用 SPAuditQuery 对象的 RestrictToListItem 方法,然后再运行查询以过滤结果,这样找出的就是所关注的项目或文档。请特别注意,SPAuditQuery 类还提供了其他两种筛选方法:RestrictToList 和 RestrictToUser,以便您可以查看特殊列表或特殊用户的审核条目。另请注意,您还可使用 RestrictToUser 与 RestrictToListItem 或 RestrictToList 方法的组合确定列表或列表项具体涉及哪位用户。
请将您想向 Ted 询问的问题和提出的意见发送至 mmoffice@microsoft.com。
Ted Pattison 是一名作家、培训师兼 SharePoint 领域的 MVP,现居住在美国佛罗里达州的坦帕市。他刚刚完成了《Inside Windows SharePoint Services 3.0》一书,该书由 Microsoft Press 出版。他还自己开办了公司 Ted Pattison Group (www.TedPattison.net),为专业开发人员提供 SharePoint 高级培训。

读书人网 >Web前端

热点推荐