Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> ACL, czyli jak powiedzieć "nie wolno"
batman
post
Post #1





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Mam małą zagwozdkę. W różnych systemach, różnie to rozwiązywałem, jednak chciałbym poznać wasze zdanie na ten temat.
Załóżmy taką sytuację. Jest serwis, w którym istnieje kilka grup użytkowników oraz różne zasoby. Oczywistym jest, że różne grupy mają różny poziom dostępu. Jeśli jakiś użytkownik, który nie ma uprawnień, próbuje dostać się do pewnego zasobu, otrzymuje komunikat błędu. Jaki powinien być ten komunikat?
1. 404 - nie ma takiej strony?
2. Wyświetlić stronę z informacją o braku dostępu do zasobu?
3. Wyświetlić formularz logowania?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
AxZx
post
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


a moze wyswietlic podstrone z informacja o braku uprawnien do przegladania tej strony + link do formularza logowania?
Go to the top of the page
+Quote Post
nrm
post
Post #3





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


zależy od typu zawartości - czasami wystarczy redirect na /login (bo po logowaniu będzie ok), czasami potrzebny będzie komunikat z okrojoną zawartością strony (np. "profil tylko dla przyjaciół"), a czasami kombinacja obu: redirect z komunikatem.

Do takich komunikatów bardzo przydają się tzw. flash_messages (msg w sesji defaultowo żyjące 1 przeładowanie).

Ten post edytował normanos 23.04.2008, 21:58:05
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


ja po prostu ograniczam takiemu użytkownikowi możliwość przejścia do podstron / uruchamiania funkcji do takich na jakie ma uprawnienia. tzn. cały interfejs jest dynamiczny i wyświetla tylko te elementy, które są niezbędne dla danego użytkownika. moje doświadczenia wskazują, że nawet jak sto razy user po kliknięciu w przycisk "edytuj" albo "usuń" widzi komunikat "niestety, masz uprawnienia tylko do przeglądania" to i tak klika kolejny raz... a jak w ogóle nie widzi przycisków " edytuj" i "usuń" to go nic nie korci (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
MMPrime
post
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 12
Dołączył: 23.04.2008

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


Tak, ale w wypadku gdy użytkownik straci sesję lub podąży za linkiem z gady-gadu, jakiegoś forum przedstawiającym krok po kroku co ma zrobić to jeśli nie jest zalogowany(a jest to konieczne) to trzeba wykonać jakąś akcję.

Najłatwiej przekierować na podstronę logowania z zachowaniem adresu url skąd użytkownik przyszedł i razem z id wiadomości którą trzeba wyświetlić petentowi.
Go to the top of the page
+Quote Post
nrm
post
Post #6





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


@nevt: słusznie, ale jak napisałem wyżej wszystko zależy od kontentu i nie ma jednej słusznej odpowiedzi. Trzymając się tego przykładu z profilem to muszę userowi wyświetlić stronę z profilem i pozbawioną jakiś tam informacji z komunikatem dlaczego nie ma pełnego wglądu i z menu np. z zaproszeniem do kontaktów (bo jakbym mu odciął wczytanie profilu to nie miałby nawet jak kogoś zaprosić do kontantu).
Go to the top of the page
+Quote Post
batman
post
Post #7





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat
ja po prostu ograniczam takiemu użytkownikowi możliwość przejścia do podstron / uruchamiania funkcji do takich na jakie ma uprawnienia

To jest oczywiste, ale są przypadki, że ktoś kombinuje z linkami, podmienia adres, itp. W takiej sytuacji nie ma możliwości ukrycia przycisku.
Go to the top of the page
+Quote Post
jastu
post
Post #8





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

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


W kontrollerze

  1. <?php
  2. try
  3. {
  4. // sprawdzane zasoby
  5. $object = new Object();
  6.  
  7. // sprawdzenie uprawnień odczytu do obiektu, $this->client to obiekt bieżącego użytkownika
  8. $this->client->read($object,true);
  9.  
  10. // dalszy kod tzn. reszta danych, logiki
  11.  
  12. }
  13. catch(AccesExcepton $e)
  14. {
  15. // kod obsługi braku dostępu
  16. }
  17. ?>


w szablonie
  1. <?php
  2. if($client->read($object)) 
  3. {
  4. // wyświetl przycisk
  5. }
  6. ?>


Zapis
Client::read($object, $throw = false)
to metoda, w której drugi parametr decyduje czy wygenerować wyjątek - czy zwrócić false/true
($client to obiekt użytkownika)

Jeżeli ktoś ma lepszy sposób, chętnie poczytam

...jeszcze coś mi do głowy przyszło : można napisać klase do tworzenia przycisków (linki i kontrola uprawnień byłaby w jednym miejscu)
  1. <?php
  2. $object->deleteButton($user);
  3. ?>

Klasa ta gdzieś była by dziedziczona np. model ->klasa_linki_uprawnienia -> klasa_właściwa ($object)

luźna myśl.....

Ten post edytował jastu 24.04.2008, 13:03:19
Go to the top of the page
+Quote Post
batman
post
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




@jastu
Tak się składa, że robię na ZF, więc mój kod wygląda nieco inaczej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Chodzi mi o uwagi mniej praktyczne (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
bim2
post
Post #10





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Mhh, ja wyświetłam zawsze brak uprawnień. Sprawdzam to w trakcie odczytywania z adresu akcji i metody. Jeśli user ma prawa, to mu się wyświetli, jeśli nie to nie. A jak z linkami?
if($this->getPlugin('Access')->can('Akcja', 'Model')) { wyswietl odpowiedni link }
Jeśli chodzi o co wyświetlić userowi co nie, to w templatce zwykła ifka moim zdaniem starcza. Nie ma tutaj co kombinować. (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) Aha, taka myśl mi przyszła, żeby sprawdzać referera. Jak z naszej strony, to link do logowania (mówię tutaj, np o edytuj linku), a jak bez referera to 404. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
NoiseMc
post
Post #11





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


Ja daje formularz logowania z 403, zapamietuje akcje i po zalogowaniu wracam ...
Go to the top of the page
+Quote Post
Jabol
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

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


Aczkolwiek czasami lepiej zrobić 404 (tzn. dokładnie tą samą akcję jaką dajesz w przypadku 404) - dla różnych krytycznych zasobów. Szczególnie jeżeli np. coś po zalogowaniu dostępne tylko dla pewnej niewielkiej podgrupy osób które mogą się zalogować. Wtedy lepiej nie zdradzać co istnieje w serwisie a co nie.
Go to the top of the page
+Quote Post
Jarod
post
Post #13





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Ja mam to rozwiązane tak. Mam klasę ACLConfiguration, która zawiera wykaz (w postaci tablicy) akcji i wymaganych uprawnień z parametrami. Do jednej akcji może być przypisane kilka uprawnień ale posiadanie tylko jednego z nich pozwala na uruchomienie akcji. W kontrolerze sprawdzam czy user jest zalogowany i jeżeli akcja, którą chce odpalić znajduje się w klasie ACLConfiguration to sprawdzam czy posiada odpowiednie uprawnienia. Jeśli nie to jest przekierowany na stronę logowania. Oczywiście user nie widzi przycisków jeśli nie ma uprawnień. Manipulowanie linkami nic nie da.Sprawdza się w 100%.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 10:43