2009-05-04 2 views
0

Я пытаюсь реализовать базовый аудит с некоторыми из моих моделей (например, CreatedAt, UpdAt, CreatedBy и UpdateBy).Получение имени пользователя внутри класса модели

Дата/время часть завершен. Я бросаю события на свои модели, когда свойство изменено (реализует INotifyPropertyChanging, INotifyPropertyChanged) и может прекрасно обновлять соответствующие поля.

Мне просто нужно знать, как получить текущее имя пользователя без необходимости передавать его через контроллер каждый раз, когда я создаю экземпляр или получаю существующий экземпляр модели.

ответ

2

Реферирование System.Web и используя HttpContext.Current.User.Identity.Name работал как шарм.

Я не знал об этом. Благодарю. Я делаю это так:

Membership.GetUser().UserName 

Какой способ быстрее?

+0

Учитывая объект пользователя уже заселена в HttpContext, что должно быть быстрее. –

+0

Не имеет большого значения, так как это приложение «в основном прочитано». – changelog

0

Ссылка System.Web и использование HttpContext.Current.User.Identity.Name работало как очарование.

2

Абстрактный способ говорить об идентичности - это «главный» - см. this thread. Я хотел бы надеяться, что этот код позволяет получить идентификатор, не зная о выполнении входа в систему:

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(); 
+0

Я не хочу указывать его, поэтому он лучше работает с подпиской на событие и делает это на самой модели. Спасибо за ссылку. – changelog

Смежные вопросы