Domyślne wartości | Ilaro.Admin
W poprzednim wpisie na temat usuwania rekordów wspomniałem o metodzie OnDelete, która ustawia wartości properties podczas usuwania.
Istnieją jeszcze dwie analogiczne metody, OnCreate i OnUpdate.
Każda z nich ustawia domyślne wartości podczas określonej akcji, OnCreate podczas tworzenia rekordu, OnUpdate podczas edycji rekordu i OnDelete podczas usuwania (soft delete).
Konfiguracja
Konfiguracja dla każdej z tych metod jest taka sama, zmienia się nazwa atrybut lub nazwa metody.
Konfiguracja atrybutami:
1 2 3 4 5 6 |
[OnCreate(ValueBehavior.UtcNow)] public DateTime CreatedOn { get; set; } [OnCreate(ValueBehavior.UtcNow)] public DateTime UpdatedOn { get; set; } [OnCreate(ValueBehavior.UtcNow)] public DateTime RemovedOn { get; set; } |
Fluent konfiguracja:
1 2 3 |
Property(x => x.CreatedOn, x => x.OnCreate(ValueBehavior.UtcNow)); Property(x => x.UpdatedOn, x => x.OnUpdate(ValueBehavior.UtcNow)); Property(x => x.RemovedOn, x => x.OnDelete(ValueBehavior.UtcNow)); |
Wartości statyczne i ValueBehavior
Te metody mogą przyjąć albo wartość statyczną:
1 2 3 |
Property(x => x.IsActive, x => x.OnCreate(true)); [OnCreate(true)] public bool IsActive { get; set; } |
Lub też mogą przyjąć wartość enuma ValueBehavior.
1 2 3 4 5 6 7 |
public enum ValueBehavior { Now, UtcNow, CurrentUserId, CurrentUserName } |
W przypadku wybrania ValueBehavior.Now lub ValueBehavior.UtcNow wartość zostanie ustawiona na obecny czas.
Jeśli zostanie wybrany ValueBehavior.CurrentUserId lub ValueBehavior.CurrentUserName wartość zostanie ustawiona na Id lub UserName zalogowanego użytkownika.
Zalogowany użytkownik
Żeby wyciągnąć dane zalogowanego użytkownika Ilaro.Admin używa interfejsu IProvidingUser.
1 2 3 4 5 |
public interface IProvidingUser { string CurrentUserName(); object CurrentId(); } |
Jego domyślna implementacja:
1 2 3 4 5 6 7 8 9 10 11 12 |
public class HttpContextUserProvider : IProvidingUser { public string CurrentUserName() { return HttpContext.Current.User.Identity.Name; } public object CurrentId() { throw new NotImplementedException("Default Ilaro.Admin HttpContextUserProvider cannot determine current user id."); } } |
UserName jest brany z obiektu HttpContext, natomiast jak widać domyślna implementacja nie ma zaimplementowanej metody CurrentId(), gdyż w ASP.NET MVC 4 obiekt HttpContext nie jest w stanie zwrócić Id zalogowanego użytkownika, istnieją inne metody dobrania się do tej informacji, jednak chciałem zachować spójność klasy. W wersji MVC 5 HttpContext posiada już taką informacje. Gdy zaktualizuje Ilaro.Admin do tej wersji MVC, uzupełnię implementacje IProvidingUser, tymczasem, by pobrać id zalogowanego użytkownika należy napisać własną implementacje.
Dodaj komentarz