Implementing Role audit trail events.

This commit is contained in:
sfmskywalker
2014-05-26 14:44:18 +02:00
parent 87d01105de
commit a6a3191422
12 changed files with 182 additions and 5 deletions

View File

@@ -9,4 +9,5 @@ Features:
Orchard.AuditTrail:
Name: AuditTrail
Description: Provides the core audit trail framework.
Category: Security
Category: Security
Dependencies: Orchard.Users, Orchard.Roles

View File

@@ -87,6 +87,10 @@
<Content Include="Views\Parts.AuditTrail.Link.cshtml" />
<Content Include="Views\Parts.AuditTrail.cshtml" />
<Content Include="Views\AuditTrailEvent-User.SummaryAdmin.cshtml" />
<Content Include="Views\AuditTrailEvent-Role-RoleRenamed.SummaryAdmin.cshtml" />
<Content Include="Views\AuditTrailEvent-Role-RoleCreated.SummaryAdmin.cshtml" />
<Content Include="Views\AuditTrailEvent-Role-PermissionAdded.SummaryAdmin.cshtml" />
<Content Include="Views\AuditTrailEvent-Role-PermissionRemoved.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
@@ -105,6 +109,9 @@
<Compile Include="Providers\Content\AuditTrailEventHandler.cs" />
<Compile Include="Helpers\EventDataHelper.cs" />
<Compile Include="Models\AuditTrailFilterParameters.cs" />
<Compile Include="Providers\Role\IRoleEventHandler.cs" />
<Compile Include="Providers\Role\RoleEventHandler.cs" />
<Compile Include="Providers\Role\RoleAuditTrailEventProvider.cs" />
<Compile Include="Providers\User\UserAuditTrailEventProvider.cs" />
<Compile Include="Providers\User\IUserEventHandler.cs" />
<Compile Include="Providers\User\UserEventHandler.cs" />

View File

@@ -5,7 +5,7 @@ using Orchard.ContentManagement;
namespace Orchard.AuditTrail.Providers.Content {
public class AuditTrailEventHandler : IAuditTrailEventHandler {
public void Create(AuditTrailCreateContext context) {
var content = (IContent)context.Properties["Content"];
var content = context.Properties.ContainsKey("Content") ? (IContent)context.Properties["Content"] : default(IContent);
var auditTrailPart = content != null ? content.As<AuditTrailPart>() : default(AuditTrailPart);
if (auditTrailPart == null)

View File

@@ -0,0 +1,13 @@
using Orchard.Events;
namespace Orchard.AuditTrail.Providers.Role {
public interface IRoleEventHandler : IEventHandler {
void Created(dynamic context);
void Removed(dynamic context);
void Renamed(dynamic context);
void PermissionAdded(dynamic context);
void PermissionRemoved(dynamic context);
void UserAdded(dynamic context);
void UserRemoved(dynamic context);
}
}

View File

@@ -0,0 +1,25 @@
using Orchard.AuditTrail.Models;
using Orchard.AuditTrail.Services;
namespace Orchard.AuditTrail.Providers.Role {
public class RoleAuditTrailEventProvider : AuditTrailEventProviderBase {
public const string RoleCreated = "RoleCreated";
public const string RoleRemoved = "RoleRemoved";
public const string RoleRenamed = "RoleRenamed";
public const string PermissionAdded = "PermissionAdded";
public const string PermissionRemoved = "PermissionRemoved";
public const string UserAdded = "UserAdded";
public const string UserRemoved = "UserRemoved";
public override void Describe(DescribeContext context) {
context.For("Role", T("Role"))
.Event(this, RoleCreated, T("Role created"), T("A role was created."), enableByDefault: true)
.Event(this, RoleRemoved, T("Role removed"), T("A role was removed."), enableByDefault: true)
.Event(this, RoleRenamed, T("Role renamed"), T("A role was renamed."), enableByDefault: true)
.Event(this, PermissionAdded, T("Permission added"), T("Permission was added to a role."), enableByDefault: true)
.Event(this, PermissionRemoved, T("Permission removed"), T("Permission was removed from a role."), enableByDefault: true)
.Event(this, UserAdded, T("User added"), T("A user was added to a role."), enableByDefault: true)
.Event(this, UserRemoved, T("User removed"), T("A user was removed from a role."), enableByDefault: true);
}
}
}

View File

@@ -0,0 +1,85 @@
using System.Collections.Generic;
using Orchard.AuditTrail.Services;
using Orchard.Security;
namespace Orchard.AuditTrail.Providers.Role {
public class RoleEventHandler : IRoleEventHandler {
private readonly IAuditTrailManager _auditTrailManager;
private readonly IWorkContextAccessor _wca;
public RoleEventHandler(IAuditTrailManager auditTrailManager, IWorkContextAccessor wca) {
_auditTrailManager = auditTrailManager;
_wca = wca;
}
public void Created(dynamic context) {
RecordAuditTrail(RoleAuditTrailEventProvider.RoleCreated, context.Role.Name);
}
public void Removed(dynamic context) {
RecordAuditTrail(RoleAuditTrailEventProvider.RoleRemoved, context.Role.Name);
}
public void Renamed(dynamic context) {
var eventData = new Dictionary<string, object> {
{"RoleName", (string)context.Role.Name},
{"PreviousRoleName", (string)context.PreviousRoleName},
{"NewRoleName", (string)context.NewRoleName},
};
RecordAuditTrail(RoleAuditTrailEventProvider.RoleRenamed, context.Role.Name, properties: null, eventData:eventData);
}
public void PermissionAdded(dynamic context) {
RecordAuditTrail(RoleAuditTrailEventProvider.PermissionAdded, context.Role.Name, context.Permission.Name);
}
public void PermissionRemoved(dynamic context) {
RecordAuditTrail(RoleAuditTrailEventProvider.PermissionRemoved, context.Role.Name, context.Permission.Name);
}
public void UserAdded(dynamic context) {
RecordAuditTrail(RoleAuditTrailEventProvider.UserAdded, context.Role.Name, context.User);
}
public void UserRemoved(dynamic context) {
RecordAuditTrail(RoleAuditTrailEventProvider.UserRemoved, context.Role.Name, context.User);
}
private void RecordAuditTrail(string eventName, string roleName) {
var eventData = new Dictionary<string, object> {
{"RoleName", roleName}
};
RecordAuditTrail(eventName, roleName, properties: null, eventData: eventData);
}
private void RecordAuditTrail(string eventName, string roleName, string permissionName) {
var eventData = new Dictionary<string, object> {
{"RoleName", roleName},
{"PermissionName", permissionName}
};
RecordAuditTrail(eventName, roleName, properties: null, eventData: eventData);
}
private void RecordAuditTrail(string eventName, string roleName, IUser user) {
var properties = new Dictionary<string, object> {
{"User", user}
};
var eventData = new Dictionary<string, object> {
{"RoleName", roleName},
{"UserName", user.UserName}
};
RecordAuditTrail(eventName, roleName, properties, eventData);
}
private void RecordAuditTrail(string eventName, string roleName, IDictionary<string, object> properties, IDictionary<string, object> eventData) {
_auditTrailManager.Record<RoleAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties, eventData, eventFilterKey: "role", eventFilterData: roleName);
}
}
}

View File

@@ -25,9 +25,14 @@ namespace Orchard.AuditTrail.Services {
metaData.Alternates.Add(String.Format("AuditTrailEvent_{0}", displayType));
metaData.Alternates.Add(String.Format("AuditTrailEvent__{0}", record.Category));
metaData.Alternates.Add(String.Format("AuditTrailEvent_{0}__{1}", displayType, record.Category));
metaData.Alternates.Add(String.Format("AuditTrailEvent_{0}__{1}", record.Category, record.Event));
metaData.Alternates.Add(String.Format("AuditTrailEvent_{0}__{1}__{2}", displayType, record.Category, record.Event));
metaData.Alternates.Add(String.Format("AuditTrailEvent_{0}__{1}", record.Category, GetShortName(record.Event)));
metaData.Alternates.Add(String.Format("AuditTrailEvent_{0}__{1}__{2}", displayType, record.Category, GetShortName(record.Event)));
return auditTrailEventShape;
}
private string GetShortName(string fullyQualifiedEventName) {
var index = fullyQualifiedEventName.LastIndexOf('.') + 1;
return fullyQualifiedEventName.Substring(index);
}
}
}

View File

@@ -0,0 +1,10 @@
@using Orchard.AuditTrail.Helpers
@{
var eventData = (IDictionary<string, object>) Model.EventData;
var roleName = eventData.Get<string>("RoleName");
var permissionName = eventData.Get<string>("PermissionName");
}
<section class="event-role">
@T("Added the <strong>{0}</strong> permission to the <strong>{1}</strong> role.", permissionName, roleName)
</section>

View File

@@ -0,0 +1,10 @@
@using Orchard.AuditTrail.Helpers
@{
var eventData = (IDictionary<string, object>) Model.EventData;
var roleName = eventData.Get<string>("RoleName");
var permissionName = eventData.Get<string>("PermissionName");
}
<section class="event-role">
@T("Removed the <strong>{0}</strong> permission from the <strong>{1}</strong> role.", permissionName, roleName)
</section>

View File

@@ -0,0 +1,9 @@
@using Orchard.AuditTrail.Helpers
@{
var eventData = (IDictionary<string, object>) Model.EventData;
var roleName = eventData.Get<string>("RoleName");
}
<section class="event-role">
@T("Created <strong>{0}</strong> role.", roleName)
</section>

View File

@@ -0,0 +1,10 @@
@using Orchard.AuditTrail.Helpers
@{
var eventData = (IDictionary<string, object>) Model.EventData;
var previousRoleName = eventData.Get<string>("PreviousRoleName");
var newRoleName = eventData.Get<string>("NewRoleName");
}
<section class="event-role">
@T("Renamed <strong>{0}</strong> to <strong>{1}</strong>.", previousRoleName, newRoleName)
</section>

View File

@@ -1 +1,3 @@

@{
var model = Model;
}