Pergunta

Eu estou tentando implementar a auditoria básica com alguns dos meus modelos (como CreatedAt, UpdatedAt, CreatedBy e UpdatedBy).

A parte de data / hora é feito. Estou jogando eventos em meus modelos quando uma propriedade é alterada (INotifyPropertyChanging, INotifyPropertyChanged de execução) e pode atualizar os campos correspondentes bem.

Eu só preciso saber como obter o nome do usuário atual sem ter que passá-lo através do controlador de cada vez que eu instanciar ou obter uma instância existente de um modelo.

Foi útil?

Solução

Referenciação System.Web e usando HttpContext.Current.User.Identity.Name trabalhou como um encanto.

Eu não sabia sobre isso. Obrigado. Eu faço isso como este:

Membership.GetUser().UserName

Qual o caminho é mais rápido?

Outras dicas

A forma abstrata de falar de identidade é o "principal" - consulte esta discussão . Espero que este código permite-lhe obter a identidade sem ter de saber sobre a implementação login:

public static class SomeUtilityClass {
    public static string GetUsername() {
        IPrincipal principal = Thread.CurrentPrincipal;
        IIdentity identity = principal == null ? null : principal.Identity;
        return identity == null ? null : identity.Name;
    }
}
...

record.UpdatedBy = record.CreatedBy = SomeUtilityClass.GetUsername();

Referenciando System.Web e usando HttpContext.Current.User.Identity.Name funcionou como um encanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top