Opticon Stockholm is on Tuesday September 10th, hope to see you there!
AI OnAI Off
Opticon Stockholm is on Tuesday September 10th, hope to see you there!
Hi,
You could hook into the ContentSecuritySaved event in the IContentSecurityRepository.
Something like the following:
[InitializableModule]
[ModuleDependency(typeof(Web.InitializationModule))]
public class SecuritySavedEventInitializationModule : IInitializableModule
{
private readonly ILogger _log = LogManager.GetLogger(typeof(SecuritySavedEventInitializationModule));
public void Initialize(InitializationEngine context)
{
var contentSecurityRepository = ServiceLocator.Current.GetInstance<IContentSecurityRepository>();
contentSecurityRepository.ContentSecuritySaved += LogContentSecuritySaved;
}
private void LogContentSecuritySaved(object sender, ContentSecurityEventArg e)
{
var principal = PrincipalInfo.CurrentPrincipal;
var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
IContent content;
if (!contentLoader.TryGet(e.ContentLink, out content))
{
return;
}
IEnumerable<string> permissions = e.ContentSecurityDescriptor.Entries.Select(entry => $"{entry.Name}: {entry.Access.ToString()}");
var message =
$"{principal.Identity.Name} changed access rights for {content.Name} ({content.ContentLink}). Permissions: {string.Join(", ", permissions)}";
_log.Log(Level.Information, message);
}
public void Uninitialize(InitializationEngine context)
{
var contentSecurityRepository = ServiceLocator.Current.GetInstance<IContentSecurityRepository>();
contentSecurityRepository.ContentSecuritySaved -= LogContentSecuritySaved;
}
}
[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class EpiserverInitialization : IInitializableModule
{
private ILogger _log;
public void Initialize(InitializationEngine context)
{
_log = EPiServer.Logging.LogManager.GetLogger(typeof(EpiserverInitialization));
var securityRepo = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentSecurityRepository>();
securityRepo.ContentSecuritySaved += SecurityRepo_ContentSecuritySaved;
}
private void SecurityRepo_ContentSecuritySaved(object sender, ContentSecurityEventArg e)
{
_log.Information($"Content security has been changed for {e.ContentLink} by {HttpContext.Current.User.Identity.Name}");
}
public void Uninitialize(InitializationEngine context)
{
var securityRepo = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentSecurityRepository>();
securityRepo.ContentSecuritySaved -= SecurityRepo_ContentSecuritySaved;
}
}
Hi,
I want to track activity of the user for "Set Access Rights" section, Is there any way to create a custom logging for the same ?
Kindly let me know if anyone has any usefull info to track the above issue.
Thanks,
Chandrakant H