mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Added User audit trail provider.
This commit is contained in:
@@ -73,6 +73,7 @@
|
||||
<ItemGroup>
|
||||
<None Include="Placement.info" />
|
||||
<Content Include="Recipes\audit-trail.recipe.xml" />
|
||||
<Content Include="Scripts\audit-trail-admin.js" />
|
||||
<Content Include="Styles\admin.css" />
|
||||
<Content Include="Styles\menu.audit-trail-admin.css" />
|
||||
<Content Include="Styles\menu.audit-trail.png" />
|
||||
@@ -100,9 +101,12 @@
|
||||
<Compile Include="AdminMenu.cs" />
|
||||
<Compile Include="Controllers\AdminController.cs" />
|
||||
<Compile Include="Drivers\ContentsDriver.cs" />
|
||||
<Compile Include="Handlers\AuditTrailEventHandler.cs" />
|
||||
<Compile Include="Providers\Content\AuditTrailEventHandler.cs" />
|
||||
<Compile Include="Helpers\EventDataHelper.cs" />
|
||||
<Compile Include="Models\AuditTrailFilterParameters.cs" />
|
||||
<Compile Include="Providers\User\UserAuditTrailEventProvider.cs" />
|
||||
<Compile Include="Providers\User\IUserEventHandler.cs" />
|
||||
<Compile Include="Providers\User\UserEventHandler.cs" />
|
||||
<Compile Include="Settings\AuditTrailPartSettings.cs" />
|
||||
<Compile Include="Settings\AuditTrailPartSettingsEvents.cs" />
|
||||
<Compile Include="ViewModels\AuditTrailEventSummaryViewModel.cs" />
|
||||
@@ -114,7 +118,7 @@
|
||||
<Compile Include="Services\IAuditTrailEventDisplayBuilder.cs" />
|
||||
<Compile Include="Services\IEventDataSerializer.cs" />
|
||||
<Compile Include="ViewModels\AuditTrailDetailsViewModel.cs" />
|
||||
<Compile Include="Handlers\GlobalContentHandler.cs" />
|
||||
<Compile Include="Providers\Content\GlobalContentHandler.cs" />
|
||||
<Compile Include="Models\AuditTrailEventDescriptor.cs" />
|
||||
<Compile Include="Models\AuditTrailCategoryDescriptor.cs" />
|
||||
<Compile Include="Models\DescribeContext.cs" />
|
||||
@@ -122,7 +126,7 @@
|
||||
<Compile Include="Models\AuditTrailContext.cs" />
|
||||
<Compile Include="Models\AuditTrailCreateContext.cs" />
|
||||
<Compile Include="Services\AuditTrailEventProviderBase.cs" />
|
||||
<Compile Include="Providers\ContentAuditTrailEventProvider.cs" />
|
||||
<Compile Include="Providers\Content\ContentAuditTrailEventProvider.cs" />
|
||||
<Compile Include="Services\IAuditTrailEventHandler.cs" />
|
||||
<Compile Include="Services\IAuditTrailEventProvider.cs" />
|
||||
<Compile Include="ViewModels\AuditTrailFilterViewModel.cs" />
|
||||
@@ -155,6 +159,7 @@
|
||||
<ItemGroup>
|
||||
<Content Include="Views\EditorTemplates\Parts.AuditTrail.Comment.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
using Orchard.AuditTrail.Services;
|
||||
using Orchard.ContentManagement;
|
||||
|
||||
namespace Orchard.AuditTrail.Handlers {
|
||||
namespace Orchard.AuditTrail.Providers.Content {
|
||||
public class AuditTrailEventHandler : IAuditTrailEventHandler {
|
||||
public void Create(AuditTrailCreateContext context) {
|
||||
var content = (IContent)context.Properties["Content"];
|
@@ -1,7 +1,7 @@
|
||||
using Orchard.AuditTrail.Models;
|
||||
using Orchard.AuditTrail.Services;
|
||||
|
||||
namespace Orchard.AuditTrail.Providers {
|
||||
namespace Orchard.AuditTrail.Providers.Content {
|
||||
public class ContentAuditTrailEventProvider : AuditTrailEventProviderBase {
|
||||
public const string Created = "Created";
|
||||
public const string Saved = "Saved";
|
@@ -1,11 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.AuditTrail.Providers;
|
||||
using System.Globalization;
|
||||
using Orchard.AuditTrail.Services;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.Handlers;
|
||||
using Orchard.ContentManagement.Records;
|
||||
|
||||
namespace Orchard.AuditTrail.Handlers {
|
||||
namespace Orchard.AuditTrail.Providers.Content {
|
||||
public class GlobalContentHandler : ContentHandler {
|
||||
private readonly IAuditTrailManager _auditTrailManager;
|
||||
private readonly IWorkContextAccessor _wca;
|
||||
@@ -56,7 +56,7 @@ namespace Orchard.AuditTrail.Handlers {
|
||||
eventData["PreviousContentItemVersionId"] = previousContentItemVersion.Id;
|
||||
}
|
||||
|
||||
_auditTrailManager.Record<ContentAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties, eventData, eventFilterKey: "content", eventFilterData: content.Id.ToString());
|
||||
_auditTrailManager.Record<ContentAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties, eventData, eventFilterKey: "content", eventFilterData: content.Id.ToString(CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
using Orchard.Events;
|
||||
using Orchard.Security;
|
||||
|
||||
namespace Orchard.AuditTrail.Providers.User {
|
||||
public interface IUserEventHandler : IEventHandler {
|
||||
/// <summary>
|
||||
/// Called after a user has changed password
|
||||
/// </summary>
|
||||
void ChangedPassword(IUser user);
|
||||
}
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
using Orchard.AuditTrail.Models;
|
||||
using Orchard.AuditTrail.Services;
|
||||
|
||||
namespace Orchard.AuditTrail.Providers.User {
|
||||
public class UserAuditTrailEventProvider : AuditTrailEventProviderBase {
|
||||
public const string PasswordChanged = "PasswordChanged";
|
||||
|
||||
public override void Describe(DescribeContext context) {
|
||||
context.For("User", T("User"))
|
||||
.Event(this, PasswordChanged, T("Password changed"), T("A user's password was changed."), enableByDefault: true);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,34 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using Orchard.AuditTrail.Services;
|
||||
using Orchard.Security;
|
||||
|
||||
namespace Orchard.AuditTrail.Providers.User {
|
||||
public class UserEventHandler : IUserEventHandler {
|
||||
private readonly IAuditTrailManager _auditTrailManager;
|
||||
private readonly IWorkContextAccessor _wca;
|
||||
|
||||
public UserEventHandler(IAuditTrailManager auditTrailManager, IWorkContextAccessor wca) {
|
||||
_auditTrailManager = auditTrailManager;
|
||||
_wca = wca;
|
||||
}
|
||||
|
||||
public void ChangedPassword(IUser user) {
|
||||
RecordAuditTrail(UserAuditTrailEventProvider.PasswordChanged, user);
|
||||
}
|
||||
|
||||
private void RecordAuditTrail(string eventName, IUser user) {
|
||||
|
||||
var properties = new Dictionary<string, object> {
|
||||
{"User", user}
|
||||
};
|
||||
|
||||
var eventData = new Dictionary<string, object> {
|
||||
{"UserId", user.Id},
|
||||
{"UserName", user.UserName}
|
||||
};
|
||||
|
||||
_auditTrailManager.Record<UserAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties, eventData, eventFilterKey: "user", eventFilterData: user.Id.ToString(CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,23 +1 @@
|
||||
@using Orchard.AuditTrail.Models
|
||||
@{
|
||||
var record = (AuditTrailEventRecord)Model.Record;
|
||||
var detailsUrl = Url.Action("Detail", "Admin", new {id = record.Id, area = "Orchard.AuditTrail"});
|
||||
}
|
||||
<div class="audit-trail-record">
|
||||
<div class="event-header">
|
||||
<div class="group">
|
||||
<div class="event-name">
|
||||
<a href="@detailsUrl">@record.Event</a> - <span>@record.Category</span>
|
||||
</div>
|
||||
<div class="event-actions">
|
||||
<a href="@detailsUrl">@T("Details")</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="event-details">
|
||||
@Display.DateTime(DateTimeUtc: record.CreatedUtc, CustomFormat: T("g"))
|
||||
@if (!String.IsNullOrWhiteSpace(record.UserName)) {
|
||||
@T(" | ")@record.UserName
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user