Skip to content

Instantly share code, notes, and snippets.

@acazsouza
Created April 22, 2012 16:51
Show Gist options
  • Save acazsouza/2465256 to your computer and use it in GitHub Desktop.
Save acazsouza/2465256 to your computer and use it in GitHub Desktop.
/// <summary>
/// Registra os Filters de Aplicação para injeção de dependência
/// </summary>
public class ApplicationFiltersModule : NinjectModule
{
public override void Load()
{
this.BindFilter<AuditoriaFilter>(FilterScope.Action, null).When(AuditoriaFilter.FilterCondition);
this.BindFilter<ValidatePermissionFilter>(FilterScope.First, null).When(ValidatePermissionFilter.FilterCondition);
}
}
/// <summary>
/// Registra a Action para Auditoria
/// </summary>
public class AuditoriaFilter : IActionFilter
{
#region Fields
private readonly IRegistrarAuditoriaService _registrarAuditoriaService;
private readonly IUsuarioRepository _usuarioRepository;
private readonly ISiteRepository _siteRepository;
private readonly IModuloRepository _moduloRepository;
private readonly IAtividadeRepository _atividadeRepository;
#endregion
#region Constructors
public AuditoriaFilter(IRegistrarAuditoriaService registrarAuditoriaService, IUsuarioRepository usuarioRepository, ISiteRepository siteRepository, IModuloRepository moduloRepository, IAtividadeRepository atividadeRepository)
{
this._registrarAuditoriaService = registrarAuditoriaService;
this._usuarioRepository = usuarioRepository;
this._siteRepository = siteRepository;
this._moduloRepository = moduloRepository;
this._atividadeRepository = atividadeRepository;
}
#endregion
/// <summary>
/// Quando o Action terminar de executar
/// </summary>
/// <param name="context">Contexto do Action quando termina de executar</param>
public void OnActionExecuted(ActionExecutedContext context)
{
//Precisa pegar o usuário logado
Usuario usuario = _usuarioRepository.ObterPorId(1);
//Precisa pegar o site logado
Site site = _siteRepository.ObterPorId(1);
Modulo modulo = _moduloRepository.ObterPorId(1);
Atividade atividade = _atividadeRepository.ObterPorId(1);
_registrarAuditoriaService.Registrar(usuario, site, modulo, atividade);
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
}
/// <summary>
/// Condição em que o filtro será executado
/// </summary>
/// <param name="controllerContext">Contexto do Controller disparado</param>
/// <param name="actionDescriptor">Descrição da Action disparada</param>
/// <returns>Verdadeiro se tiver permissão, falso caso contrário</returns>
public static bool FilterCondition(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
bool postHttpMethod = controllerContext.RequestContext.HttpContext.Request.HttpMethod.ToUpper() == "POST";
string controllerName = actionDescriptor.ControllerDescriptor.ControllerName;
//Faz Auditoria de todos as Actions que contém POST de menos as do Controller de Login
if (postHttpMethod && controllerName != "Login")
return true;
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment