To zabrzmi jak głupie pytanie, ale ja tylko zastanawiam się, czy gdzieś nigdzie mnie nie brakuje.Najlepszy sposób na zapewnienie, że zalogowani użytkownicy widzą tylko ich dane
Scenariusz polega na tym, że mam aplikację internetową wykorzystującą Simple Memebership, w której użytkownicy mogą się zarejestrować, aby z niej skorzystać (np. Program fakturowania).
Powinny one jednak móc tylko wyświetlać/aktualizować/usuwać informacje, które same dodają do bazy danych/aplikacji internetowej.
Jaki jest najlepszy sposób, aby zapewnić użytkownikowi dostęp tylko do ich informacji?
Czy dodać pole Nazwa użytkownika na każdym stole, na przykład:
public class Invoice
{
public int InvoiceId { get; set; }
public int CustId { get; set; }
public string UserName { get; set; }
}
public class Item
{
public int ItemId { get; set; }
public int InvoiceId { get; set; }
public string UserName { get; set; }
}
... a potem w dowolnym kontrolerze, który uzyskuje dostęp do danych, wystarczy dodać czek na nazwie użytkownika w każdym zapytaniu, np:
var Inv = db.Invoices.Where(x => x.UserName = User.Identity.Name);
var Itm = db.Items.Where(y => y.UserName = User.Identity.Name);
to właśnie używam obecnie, ale zastanawiałem się, czy to jest najlepszych praktyk? Lub jeśli jest prostszy sposób teraz jesteśmy na MVC4?
Czy to najlepiej użyć nazwa_użytkownika lub userid z UserProfile stole, albo to ma znaczenie?
Aktualizacja dodać klarowność po komentarzach
Więc 10 użytkowników zarejestrowało - a wszystko stworzył własne faktury. Nie chcę, aby ktokolwiek widział faktury innych użytkowników.
Dzięki za radę.
Mark
Ja nie musi to być zrobione na poziomie kodu, ale raczej na poziomie bazy danych. Jeśli użytkownik publikuje coś, najlepszym sposobem jest powiązanie tego wpisu z użytkownikiem. Jeśli użytkownik przegląda witrynę, zapytanie powinno pobrać wszystkie informacje związane z tym użytkownikiem, więc nie musisz zajmować się tym w kodzie. – Terry
Jak możesz to zrobić w dowolnym miejscu poza kodem? Baza danych nie wiedziałaby, kim jest użytkownik (przepraszam, jeśli przegapiłem twój punkt widzenia). dziękuję – Mark
W pewnym momencie aplikacji, musisz odzyskać informacje, które użytkownik może zobaczyć. W tym momencie już wiesz, kim jest użytkownik, ponieważ się loguje, więc powinieneś mieć przynajmniej identyfikator użytkownika. Teraz, gdy pobierzesz informacje, użyj tego identyfikatora użytkownika, aby wykonać zapytanie i uzyskać informacje powiązane z właściwym użytkownikiem. – Terry