![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 426 Pomógł: 1 Dołączył: 2.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Natrafiłem na następujący problem podczas pisania frameworka: Na podastawie adresu http://strona.pl/controller/action wywołuje odpowiedni obiekt controllera a potem metode na podstawie nazwy akcji. No i powiedzmy ze kontroler nazywa sie 'newsy' czyli mam folder newsy a w nim główny plik kontrolera news.php i w nim wszystkie metody np: 'wyswietlNews', 'archiwum' oraz te co powinny być dostępne z panelu administrcyjnego: 'edytuj', 'akceptuj', 'dodaj', ale nie wiem jak skutecznie rozwiązać prolem z logowaniem aby np po przejsciu do innego kontrolera ('forum') nie trzeba było sie pomownie logować. Chodzi mi o przykładowe API z waszych frameworków ![]() Pozdrawiam Apo |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
w roznych fm roznie to pewnie mozna rozwiazac.
w cakePHP masz nadrzedny kontroler gdzie mozesz umiescic akcje dla wszystkich, skorzystac np. z beforeFilter
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Moje rozwiazanie jest nastepujace:
1. Kazda akcja to osobna klasa. Czyli mam np. klasy DodajNowosc, EdytujNowosc, PokazZdjecie. W klasach tych wymagana jest metoda execute(), ktora zawiera cialo akcji. Ponad to Akcja musi miec zdefiniowana metode isSecure zwracajaca wartosc logiczna, ktora informuje framework, czy nalezy sprawdzac bezpieczenstwo. Jezeli isSecure zwraca true, pobierany jest konfig akcji i sprawdzany jakie grupy sa wymagane. Framework sprawdza, czy uzytkownik je ma i odpowienio - olbo odrzuca akcje, albo ja wykonuje. Jak wykorzystac to w panelu? Akcje typu PokazNewsa, DodajKomentarz nie musza korzystac z bezpieczenstwa. Ale UsunNewsa, EdytujNewsa sa bezpieczne i wymagaja grypy np. admin albo moderator. Ponad to, zwracajac uwage na fakt, ze panel moze wygladac zupelni inaczej (wizualnie) od strony, to mozemy uzyc w tych akcjach innego szablonu dla widoku glownego ![]() Pozdrawiam, Adrian. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Hmmm... Ja mimo wszystko bym nie wiązał autoryzacji z samymi akcjami. Najlepiej tutaj sprawdza się wzorzec Intercepting Filter. Na samym końcu wstępnego filtrowania żądania autoryzujemy użytkownika. Interfejs filtru jest bardzo prosty:
Gdzie jedynym argumentem jest obiekt zawierającym wszystkie dane o kontekście żądania. Wszelkie operacje są wykonywane właśnie na tym obiekcie (np. zmiana łańcucha wywołania akcji). Sprawdzać uprawnienia można na różne sposoby - pierwszą akcję lub cały łańcuch. Pierwsze rozwiązanie szybsze i wygodniejsze, drugie za to bezpieczniejsze. Mój system autoryzacji i autentykacji możesz znaleźć tutaj. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 426 Pomógł: 1 Dołączył: 2.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
@Ludvik rozpisales sie z tym kodem ;P
Wkońcu zaczełem pisać obsługe autoryzacji i mam takie cos:
Api dla nadawanie praw i grup wygląda tak:
No i w moim frameworku akcje wyglądają tak że każda akcja np newsView, newsEdit to osobna klasa w osobnym pliku która dziedziczy klase abstrakcyjną akcji. No i chciałem do tego pliku z akcją dołączyć pomocniczą klase dostępu (newsViewAuth, newsViewEdit) gdzie będzie klasa dziedziczącą klasę autoryzacji do sprawdzania dostępu:
W dispatherze który wywołuje obiekt odpowiedniej akcji najpierw sprawdzałbym czy dany użytkownik ma do niej prawa o potem dopiero wywoływał jej obiekt. Niewiem gdzie czymać tablice z grupami i prawami dostępu do odpowiednich akcji no i kiedy je tworzyc. User miałby swoją tablice z prawami zapisaną w bazie i przy logowaniu zapisze ją do $_SESSION['security'] ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 18:49 |