Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Elastyczna klasa autoryzacji+acl+user
marcio
post
Post #1





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


yoyo rozbudowywuje moj form builider & admin generator o wlasne logowanie i acl.

Poki co zanim zaczne implementowac cokolwiek chcialem zapytac sie jak to najlepiej zrobic.
Klase do obslugi acl juz mam brakuje mi tylko ogolnego logowania.
Nie jest to w mvc/mvp bo sam form builider i admin generator generuja kod html na podstawie duzo czynnikow a z poczatku "projekt" mial byc komponentem do mojego fw, jednak przeportowalem to tak zeby dzialalo nie zaleznie od "srodowiska".

A wiec logowanie ma byc elastyczne w sensie ze ma umozliwiac generalny schemat logowania ale oprocz tego zeby mozna bylo napisac swoj wlasny sterownik autoryzacji...inna struktura tabeli/inna baza/pliki i co jeszcze mozna wymyslec wazne zeby wszystko opieralo sie na wspolnym "api"(interfejsach) i zwracalo w porzadany sposob z tablica acl.

Pomyslalem zeby tez byla generalna klasa User ktora udostepnialaby o nim informacje, ustawiala pewne dane, zeby byla takim ogolnem kontenerem na obiekt typu User.

Mam tylko dylemat czy oprzec to na interfejsach czy tez na klasie abstrakyjnej lub na tej ostatniej(bazowa funkcjonalnosc) z domieszka interfejsow.

Hehe takie gdybanie...
  1. <?php
  2.  
  3. interface IUser
  4. {
  5. public function get_by_id($id);
  6. public function get_by_login($login);
  7. public function get_login();
  8. public function get_role();
  9. public function get_ip();
  10. public function get_browser();
  11. public function get_time();
  12. public function set_login($login);
  13. public function set_password($pwd);
  14. public function set_id($id);
  15. public function set_hash($hash);
  16. }
  17.  
  18. ?>

Myslalem o takim czyms prosze nie zwracac uwagi na nazwy metod (rzucilem tak na szybko idea i ich standard !sic CamelCase) gdzie glowna klasa wczytywala by sterownik ktory musialby implementowac ten interfejs.Czy jest to spojne?Do tej pory nie mialem problemow z implementacja ale jakos Obsluga uzytkownika chce zeby byla napisana dobrze.

To samo jest chodzi o klase Auth czyli interfejs,glowna klasa i sterownik(czy adapter jak to chcecie nazwac).

Jak wy to zalatwiacie?Fajnie by bylo gdyby odp byly razem z kawalkami kodu czy cos haha.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Noidea
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

Ostrzeżenie: (0%)
-----


Ja, gdy nie korzystam z ORMa i piszę takie klasy-kontenery nie tworzę im interfejsów. Po prostu nie wydaje mi się, żeby kiedykolwiek zaszła potrzeba podmiany implementacji takiej klasy. A jeśli potrzebuje trochę więcej zróżnicowania, to robię zwykłe dziedziczenie, np. AdminUser i BannedUser dziedziczące po nieabstrakcyjnej User.

Ty w swojej klasie masz metody get_by_id i get_by_login. Jeśli dobrze rozumiem, to te metody nic nie zwracają, tylko uzupełniają pusty obiekt User, na którym zostały wywołane. Osobiście rozbiłbym to na 2 klasy, ale jak chcesz mieć tak jak teraz, to powinieneś stosować interfejs/klasę abstrakcyjną. Tutaj potrzeba podmiany implementacji jest już większa (pobieranie danych z bazy, pliku XML, CSV, itp.)

Co do implementacji interfejsu vs. dziedziczenia po klasie abstrakcyjnej, to przypomnij sobie jakie są między nimi różnice (interfejsy "nie mają kodu", można dziedziczyć tylko po 1 klasie, itd.) i wybierz tą metodę, która będzie wygodniejsza. Ja w większości przypadków stosuję interfejsy, a klasy abstrakcyjne tylko wtedy, gdy czuję że będzie to właściwe rozwiązanie. Nie wiem co wchodzi w skład takiego czucia, więc ci tego nie napiszę. Pewnie będziesz musiał wdepnąć kilka razy w niepoprawne użycie klasy abstrakcyjnej, żeby to załapać smile.gif

W tym wypadku, jako że masz tu oprócz tych nieszczęsnych 2 metod same pola opakowane w gettery i settery oraz jako że nie wydaje mi się, żeby klasa uzytkownika musiała dziedziczyć po czymkolwiek, użyłbym klasy abstrakcyjnej UserBase i dziedziczące po niej DatabaseStoredUser, XmlStoredUser, itd. Wygląda to... średnio, ale tak jak mówiłem, rozbiłbym to na 2 klasy.

Ten post edytował Noidea 13.10.2011, 10:27:41


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 16:12