Obtendo o nome de usuário dentro de uma classe de modelo
-
03-07-2019 - |
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.
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.