Jak zaprojektować mechanizm logowania w aplikacji?

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.

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ć.

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:

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:

[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

0

Ponawiam pytanie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1