![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 30.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Od pewnego czasu poznaje mvc i natrafiłem na ciekawy tutorial na http://www.phpit.net/article/simple-mvc-php5/ . Bardzo mi podeszło to co tam jest przedstawione - myśle, że na początek jest idealne. I, że będe to mugł (mvc) wykorzystywać jako podstawe w kolejnych aplikacjach PHP. Ale do rzeczy, przechodząc przez ten tutorial - przerabiając cześciowo itp. , zastanawia mnie jeden fakt... Jak zrobić dosęp do panelu administracyjnego , chciałbym to zrobić w ruterze no i właśnie, nie za bardzo wiem który z pomysłów wybrać. Mam dwa pomysły na dzień dzisiejszy - jeden to sytuacja w którym sprawdzany jet czy podkatalog w sciezce jest katalogiem administracyjnym np:
Powyższa sytuacja zdaje się być dobra gdy użytkownika zaogowany to admin i nikt więcej. Drugie rozwiązanie to system praw zapisywanych/odczytywanych z bazy danych (zserializowana tabela). W ruterze wykonywana by była funkcja mapująca (ja to tak widze) - sprawdzająca otrzymaje prawa z powiązaniami prawo - kontroler. Jeśli ktoś się zastanawia o co mi chodzi, to chodzi o to czy ma ktoś jakies inne pomysły na rozwiązanie tego zadania, które można by tak w około >80% używać w przyszłości. Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Liczyłem że zostanie skrytykowana (pozytywnie lub nie) metoda autoryzacji dostępu do treści w kodzie akcji, może się jeszcze doczekam.
Co do metody isAuthorized() to trochę jednak mnie zastanawia, ponieważ czasem zanim dostaniem się do danych nam potrzebnych do autoryzacji musimy wydobyć inne, a wtedy metoda nie robi tylko tego co powinna. Do tego sprawdzenia
powinny być nie na tym poziomie, tylko obiekt autoryzacji to powinien wiedzieć, przekazujemy autora i mamy boolean, nie obchodzi nas czy ma dostęp bo jest adminem czy dlatego że jest autorem. Do tego nie wiemy co mamy robić kiedy ktoś nie ma dostępu do treści, przy edycji to jest raczej oczywiste, przy podanym przeze mnie przykładzie dostępu do artykułu już nie. Ponieważ nie chcemy nic robić więcej niż wyświetlić inny szablon. Oczywiście ta metoda mogła by go zmienić i zwrócić true ale to moim zdanie mijanie się z celem. Sam nie jestem do niczego przekonany, więc chętnie wysłucham wszelkich konstruktywnych uwag. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Liczyłem że zostanie skrytykowana (pozytywnie lub nie) metoda autoryzacji dostępu do treści w kodzie akcji, może się jeszcze doczekam. Co do metody isAuthorized() to trochę jednak mnie zastanawia, ponieważ czasem zanim dostaniem się do danych nam potrzebnych do autoryzacji musimy wydobyć inne, a wtedy metoda nie robi tylko tego co powinna.
Do tego sprawdzenia powinny być nie na tym poziomie, tylko obiekt autoryzacji to powinien wiedzieć, przekazujemy autora i mamy boolean, nie obchodzi nas czy ma dostęp bo jest adminem czy dlatego że jest autorem. Nie sądzę byś miał tutaj rację: - Skąd SecurityManager ma wiedzieć, że ta akcja operuje na takich czy też innych obiektach? - W jaki sposób ma odczytywać obiekty? W końcu to nie jest brocha SM. - Co jeśli SecurityManager ma się zachowywać różnie w zależności od akcji? To znaczy są zmiany w sposobie dostępu do tego obiektu. Osobiście pracuję w kodzie, w którym to SecurityManager ma wiedzieć czy ktoś ma dostęp do obiektu i wierz mi, jest sieczka. Są cztery klasy, każda gromada metod statycznych tylko po to by sprawdzić isUserAuthorizedForApprove(Application, Client, User). Do tego urosły wielkie utile, które są głównie używane w owych managerach. Do tego nie wiemy co mamy robić kiedy ktoś nie ma dostępu do treści, przy edycji to jest raczej oczywiste, przy podanym przeze mnie przykładzie dostępu do artykułu już nie. Ponieważ nie chcemy nic robić więcej niż wyświetlić inny szablon. To co przemawia za tym by ten kod był właśnie w akcji to to, że akcja wie z czego będzie korzystać i z nikim innym nie musi się tym dzielić. Mylisz się twierdząc, że akcja nie wie jak zachować się w przypadku błędu z dostępem do obiektu. Może albo wywalić wyjątek, powiedzmy new UnauthorizedObjectAccessException(object $type) a jego obsługę zrzucić na kark FrontController-a albo przekierować na odpowiednią stronę (tu dodajemy metodę do interfejsu).
W skrajnym wypadku można wywalić CustomAuthorizationAction i pójść w abstrakcje:
Oczywiście nie jest to jedyne rozwiązanie, fakt faktem zgłoszone uwagi wymagały rozbudowania przykładu podanego na początku. Inny pomysł jaki przyszedł mi do głowy to tworzenie delegatów, które by się przekazywało do SecureManagera. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 22:31 |