Buduję aplikację asp.net mvc web api i nie wiem, jak robić elementy członkostwa.Dostawca ról/członkostwo? Jak w asp.net web api?
W moim obecnym projekcie mam to
Mój własny Users Table
i Role Table
nie używam członkostwa asp.net jak to przynosi zbyt dużo bagażu i nie pasuje jak chcę zaprojektować bazę danych (na pewno mogę się można to jednak wydaje mi się dużo pracy)
user
mieć wiele ról a role
może mieć wielu użytkowników.
Używam EF do wykonywania prawie wszystkich moich połączeń z bazą danych.
W poprzednich projektach wykonałem własne Authorize Attribute
, co zrobiłem w swoim własnym wywołaniu w mojej bazie danych i sprawdziłem, czy użytkownik był w prawidłowej roli, jak to było dozwolone w tym kontrolerze/metodzie działania.
Nie robiąc żadnych dostawców członkostwa, straciłem część wbudowanych funkcji, takich jak User.IsInRole
. Nadal byłem w stanie używać User.Identity.Name
, ale myślę, że to z powodu ustawionego przeze mnie cookie.
Jaki jest najlepszy sposób na zrobienie tego teraz w asp.net mvc 4/web api?
Podczas googlowania znalazłem "SimpleMembership", ale nie czytałem jeszcze zbyt wiele.
Na marginesie mogę użyć User.Identity.Name
z moją webapi, jeśli uwierzytelniłem użytkownika?
Jak o User.Identity.Name jak to ustawić w asp.net webapi? W poprzedniej aplikacji mvc 3 miałem w moim niestandardowym atrybucie autoryzacji to: httpContext.User.Identity.Name, a następnie użyłem swojej własnej warstwy usług o tej nazwie, aby dowiedzieć się, jakie uprawnienia posiadał użytkownik. Czy mogę użyć httpContext.User.Identity.Name, jak myślałem, że został ustawiony przez cookie? – chobo2
Tak, możesz mieć niestandardowy atrybut autoryzacji i ustawić "Thread.CurrentPrincipal" dla odpowiedniego użytkownika. Spójrz na przykładową implementację, którą napisałem, która używa dostawcy członkostwa z podstawowym uwierzytelnieniem: http://stackoverflow.com/a/11536349/29407 W tym przykładzie użyłem niestandardowego programu obsługi delegowania, ale możesz użyć filtra autoryzacji, jeśli także chcesz. –
Cool, który jest bardzo pomocny. Mam jednak kilka pytań. Dlaczego Async? Dlaczego musisz zarejestrować program obsługi (nie zrobiłem i User.Identity jest wypełniony, ale nie dokonałem asynchronizacji), po co wypełniać role, ponieważ nie wiesz, jak uzyskać do nich dostęp. – chobo2