mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Implementing Role audit trail events.
This commit is contained in:
@@ -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
|
||||
@@ -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" />
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -1 +1,3 @@
|
||||
|
||||
@{
|
||||
var model = Model;
|
||||
}
|
||||
Reference in New Issue
Block a user