Получение имени пользователя внутри класса модели

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

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

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


person changelog    schedule 04.05.2009    source источник


Ответы (3)


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

Я не знал об этом. Спасибо. Я делаю это так:

Membership.GetUser().UserName

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

person Dmitry44    schedule 04.05.2009
comment
Учитывая, что объект User уже заполнен в HttpContext, это должно быть быстрее. - person Çağdaş Tekin; 04.05.2009
comment
Не имеет большого значения, так как это в основном читаемое приложение. - person changelog; 05.05.2009

Абстрактный способ говорить об идентичности - это "основной" - см. эту тему. Я надеюсь, что этот код позволит вам получить личность, не зная о реализации входа в систему:

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();
person Marc Gravell    schedule 04.05.2009
comment
Я не хочу его указывать, поэтому он лучше работает с подпиской на событие и выполнением этого на самой модели. Спасибо за ссылку. - person changelog; 05.05.2009

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

person changelog    schedule 04.05.2009