Jak zaprojektować mechanizm logowania w aplikacji?

Jak zaprojektować mechanizm logowania w aplikacji?
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam aplikację C# oraz zewnętrzną baza danych, która przechowuje informacje nt. użytkowników (zwykłych i adminów). Teraz chciałbym aby mój program umożliwiał rózne funkcje z zależności od tego na jakiego typu konto się zalogujemy. I teraz pytanie jak to poprawnie zaprojektować, chodzi mi o sam mechanizm logowania. Zrobić jakąś klasę "System" która będzie miała funkcje: Login(), Logout(), ChangePassword(), ChangeInformation(), IsAdmin() itp? Czy robi się to jakoś inaczej? To mój 1 projekt do portfolio temu chciałbym to zrobić ok.

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
2

Na razie masz użytkowników zwykłych i adminów. Za jakiś czas okaże się, że konieczny jest pomocnik admina, i będziesz mnożył niepotrzebnie byty. W uproszczeniu - logowanie to pobranie danych do logowania, sprawdzenie ich poprawności, zalogowanie (lub nie) i ewentualnie pobranie uprawnień, a te będą zależne od typu użytkownika, na koniec zapisanie sobie statusu tych operacji (taki log logowania :D). Część dotyczącą uprawnień należy napisać tak, by dodanie kolejnych praw do danych operacji/miejsc w programie nie powodowało zmiany kodu.
Można od razu przy okazji dodać, że nie warto przechowywać w bazie haseł pisanych czystym tekstem, a przy jakimś ich kodowaniu trzeba je dosolić.

  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki za odpowiedź ;) A więc ja widzę to tak: tworzę klasę AuthorizationManager, która jest odpowiedzialna tylko i wyłącznie za autoryzację użytkowników, także będzie ona miała dwie publiczne metody:

Kopiuj
Login(string username, string password); Logout();

W metodzie Login() będę łączył się z bazą danych i sprawdzał czy podane dane do logowania się zgadzają, jeśli tak będę tworzył odpowiedni obiekt GenericPrincipal() i GenericIdentity() i przypisywał go do wątku. Następnie tworzę klasę UserPanel, która będzie miała odpowiednio metody: ChangePassword(), ChangeInfo(), AddAction(), .... Nie które z tych funkcji będą wymagały praw administratora i będę właśnie na podstawie atrybutu:

Kopiuj
[PrincipalPermission(SecurityAction.Demand, Role = Roles.Administrator)]

Takie podejście jest ok?

Mam jeszcze jedno pytanie czy klasy AuthorizationManager i UserPanel powinny być zaimplementowane jako statyczne klasy, singletony czy może inaczej?

dodanie znaczników `` i <code class="csharp"> - @furious programming

  • Rejestracja: dni
  • Ostatnio: dni
0

Ponawiam pytanie ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.