Obecnie w niemal każdej aplikacji biznesowej wymagane jest zalogowanie się by w pełni móc korzystać z możliwości jakie taka aplikacje daje, lub by wogóle móc cokolwiek zrobić. Jakiś czas temu zrobiłem krótki research po sieci w poszukiwaniu jakiegoś sprytniejszego rozwiązania niż to które używam w swoich aplikacjach. Cóż…dziwni są ludzie którzy zatrudniają do obrony swojego zamku legiony, a pozwalają do niej wejść zwykłym OR 1=1 (to tak na marginesie), nie rozumię też rozwiązania które zostało pozytywnie ocenione na jednym z for programistycznych a wygląda ono tak:
W aplikacji sprawdzamy czy ustawiony jest w bazie znacznik informujący o zalogowaniu, jeśli nie to po zalogowaniu generujemy go, a usuwamy go gdy użytkownik zamknie aplikację…a co jeśli zwiesi się komp, zabraknie prądu albo wydarzy się coś innego ? Przecież po wystąpieniu tak nieoczekiwanego zdarzenia wartość w bazie może się nie zmienić a wtedy każdy kto skorzysta z komputera będzie zalogowany. Naprawdę nie rozumię wielu tych wielkich idei, dlatego na razie nadal korzystam z bardzo prostego rozwiązania które wygląda następująco:
W aplikacji w sekcji odpowiedzialnej za przechowanie predefiniowanych zmiennych globalnych (jak np. nazwa bazy, string wyświetlany w górnej belce aplikacji etc.), ustawiam sobie zmienną określającą czy użytkownik jest zalogowany (domyślnie ustawioną na false), oraz metodę pozwalającą zmienić wartość tej zmiennej:
public class GlobalAppVariables
{
/// Globalna zmienna której wartość jest ustwaiona na 1 gdy użytkownik się zaloguje.
static int _logged = 0;
/// Dostęp/zmiana wartości globalnej zmiennej _logged
public static int Logged
{
get
{
return _logged;
}
set
{
_logged = value;
}
}
}
Samo logowanie polega na wywołaniu metody która połączy się z bazą, sprawdzi czy dla podanych parametrów istnieje wpis i na tej podstawie zwrócie wynik pozytywny/negatywny co zkolei pozwoli mi ustawić wartość zmiennej _logged w następujący sposób:
private void button1_Click(object sender, EventArgs e)
{
object result = Queries.StartSession(this.loginTxt.Text, this.PasswordTxt.Text);
//Queries to osobna klasa w której przechowywane są metody odpowiedzialne za oberacje na bazie
if (result != null)
{
this.Close(); //zamknięcie okna logowania
GlobalAppVariables.Logged = 1; // w tej chwili wiem że już mam zalogowanego użytkownika
}
else
{
//info o nieudanym logowaniu
}
}
Jeśli już mam zalogowanego użytkownika mogę odblokować domyślnie wyłączone opcje, lub zrobić coś innego.
Jeśli niepotrzebujesz wymyślnego systemu logowania skorzystaj z przedstawionego sposobu, jest on wystarczający dla wielu nieskomplikowanych aplikacji. AVE!

0
komentarzy