Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> kontrola dostepu
evo
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 4.02.2003

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


Witam,


Chial bym rozpoczac dyskusje na temat w jaki sposob projektuje sie system z kontrola dostepu.

Osobiscie jestem na etapie mojego pierwszego projektu ,ktory wymaga wiecej niz dwoch stanow (admin, user), wymaga on grup o roznym zakresie dostepu do systemu

Zabardzo nie wiem jak sie do tego zabrac.

Sam moj system/jadro laduje odpowiednie wtyczki,ktore sa odpowiedzialane za dostep do danych. Do tej pory kontrolowalem dostep na polacie wyboru akcji, bo kazdy plugin choc do innei zawartosci obsluguje te same akcje (add,remove,edit,show) wiec po wyborze wtyczki lecz przed wyborem akcji sprawdzalem czy uzytkownik ma prawo do tego, lecz teraz potrzebje wiekszej wolnosci tzn. niektorzy moga miec dostep do czegos do czego inni nie i na odwrot.

I zastanawiam sie czy nie przeniesc kontroli dostepu do samych akcji dostepu do danych, czy moze lepiej wymagac od wtyczki by opisala kto ma do jakich akcji dostep a sama kontrole zostawic w jadrze.




Wszelkie uwagi i pomysly sa mile widziane jak i wszelkiego rodzaju materialy, ktore wcale nie musza byc oparte na przykladach php, lecz duzym plusem by bylo gdyby opisywaly schemat kontroli dostepu w aplikacjach web. Jezyk Niemiecki,Angielski lub Polski.

Z gory dziekuje i pozdrawiam
evo
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ludvik
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Wygląda to tak:

Mamy akcję, która manipuluje danymi. Chcemy mieć kilka różnych zestawów danych, które będą istniały niezależnie od siebie. Musimy jakoś identyfikować te zestawy - intuicyjnie będziemy je oznaczać liczbami naturalnymi. W momencie wywołania akcji musi być znany identyfikator zestawu. Przed wywołaniem akcji musimy do naszego kontrolera (za kontroler przyjmiemy system autoryzacji) przekazać:
- Nazwę akcji
- Parametry z jakimi ją wywołujemy
- Specyfikację dostępu (czyli grupy, role i ich parametry)

Następnie musimy mieć dostęp do obiektu użytkownika, który będzie zawierał informację o rolach i grupach oraz ich parametrach. Teraz możemy wszystko porównać.

Przykład:
Użytkownik posiada rolę doAction, do której musimy przekazać parametry - domyślnie nie ma żadnego. Podajemy numer zestawu - powiedzmy, że 1. Akcję więc opisujemy następująco: doAction(1). Co z grupami? Podając parametry dla grupy możemy je jednakowo przekazać wszystkim rolom (jeżeli nasza hierarchia wygląda tak jak u Halfika).

Akcja wymaga roli doAction. Możemy wydzielić trzy metody postępowania z parametrami:
1. Parametry są opcjonalne (to raczej tylko dla wstecznej zgodności...).
2. Parametry są wymagane - jeżeli nie ma żadnego, to rola nie ma sensu.
3. Nie ma parametrów.

Teraz przechodzimy do meritum sprawy (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Kontroler otrzymuje żądanie autoryzacji tego użytkownika dla tej akcji oraz podaje parametry z jakimi ma zostać wywołana akcja. Używamy zestawu pierwszego, więc interesującym nas parametrem będzie "id", którego wartość będzie równa 1. Konfiguracja akcji wymaga posiadania roli doAction oraz parametru. Jak zatem powiedzieć kontrolerowi o co nam chodzi? Musimy w jakiś sposób przekazać mu informację o tym, że musimy znaleźć na liście parametrów roli konkretny parametr akcji. Zapiszmy to tak:

Kod
Required: doAction($id)


Teraz cały proces autoryzacji będzie wyglądał następująco:
1. Szukamy akcji doAction.
2. Pobieramy parametr id z żądania (posiada wartość 1).
3. Porównujemy listę parametrów roli (która w tym przypadku jest jednoelementowa, a jej jedyny element ma wartość 1).

Jeżeli znajdziemy parametr na liście, to zezwalamy na wywołanie akcji. W przeciwnym wypadku zmieniamy ścieżkę wykonania programu.

Tak to mniej więcej wygląda.

Uwagi:
- Kolejność parametrów jest ignorowana, szukamy tylko wspólnych elementów.
- Parametr może być dowolną wartością skalarną.
- Jeżeli chcemy wprowadzić dostęp do wszystkich zestawów, możemy przypisać roli użytkownika jeden parametr "*".
- Podział odpowiedzialności akcji musi być odpowiedni, aby nie pomieszać parametrów. Lepiej pomyśleć chwilę nad konstrukcją akcji niż mieszać przy konstrukcji parametrów.
- Jeżeli wywołamy akcję z fikcyjnym zestawem np. 13, wtedy użytkownik nie otrzyma uprawnień i może zostać wyrzucony błąd autoryzacji. To jest nieprawda, gdyż użytkownik nie ma prawa mieć dostępu do czegoś, co nie istnieje. Wypada sprawdzić wcześniej czy faktycznie ten zestaw istnieje.

Zapis parametrów w bazie jest luźny - lekko zmieniamy formę, w której zapisywaliśmy role/grupy. Musimy tylko umieć skojarzyć identyfikator zestawu z parametrami ról.

Update:
Tak by wyglądał przykłądowy wpis do bazy:
Kod
user = login
roles = doAction(1,5,9);doOtherAction(3);doAnything(*)
groups = someGroup(1,3,7)

Jeżeli grupa by wyglądała tak:
Kod
name = someGroup
roles = roleOne;roleTwo

To użytkownik by posiadał ostatecznie role doAction(1,5,9), doOtherAction(3), doAnything(*), roleOne(1,3,7), roleTwo(1,3,7). To jest tylko przykładowy zapis.

Mam nadzieję, że jest w miarę jasno i nie zapomniałem o niczym.

Ten post edytował Ludvik 8.12.2005, 22:03:53
Go to the top of the page
+Quote Post

Posty w temacie
- evo   kontrola dostepu   3.12.2005, 17:50:54
- - Ociu   Nauczyłem się używać i będę polecał: F-L-A-G-I. P...   3.12.2005, 20:55:09
- - Ludvik   Osobiście stosuję autoryzację opartą na grupach i ...   3.12.2005, 22:52:52
- - Ociu   coś podobnego miałem na myśli. [PHP] pobierz, pla...   4.12.2005, 09:17:15
- - Ludvik   Co do twojego kodu: Ja bym nie dopuścił akcji do ...   4.12.2005, 11:58:21
- - SongoQ   Mam troszeczke inne podejscie, wiekszosc uprawnien...   4.12.2005, 12:53:40
- - Ociu   Cytat(Ludvik @ 2005-12-04 12:58:21)Ja bym nie...   4.12.2005, 13:26:43
- - halfik   ja takie rzeczy tez robie w oparciu o grupy i role...   5.12.2005, 16:39:26
- - Ludvik   Ja bym wyróżnił zabranianie od braku uprawnień... ...   5.12.2005, 20:32:15
- - halfik   CytatJeżeli mówisz, że jedna grupa nie posiada ról...   6.12.2005, 18:18:40
- - Ludvik   Cytatchociaz pewnie zdarza sie systemy, w ktorych ...   8.12.2005, 00:46:41
- - NuLL   CytatCo do grup to nie zrozumieliśmy się chyba. Gr...   8.12.2005, 01:00:18
- - halfik   CytatSytuacja jest taka: banowanie i odbanowywanie...   8.12.2005, 03:53:05
- - Ludvik   CytatA co jesli uzytkownik ma miec mozliwosc tylko...   8.12.2005, 20:00:28
- - halfik   hmmm a w jakis sposob chcesz parametryzowac te gru...   8.12.2005, 20:10:00
- - Ludvik   Wygląda to tak: Mamy akcję, która manipuluje dany...   8.12.2005, 21:56:22
- - halfik   no dobra, a skad kontroler ma wiedziec jakie sa mo...   9.12.2005, 11:39:23
- - Ludvik   Nic nie jest na stałe zakodowane. Wpisy do bazy wy...   9.12.2005, 21:33:57
- - halfik   CytatJak będzie czas to wezmę się za to, w tej chw...   10.12.2005, 01:15:19
- - Ludvik   Nie chodzi o to, że grupy są specjalne, ale trzeba...   11.12.2005, 11:38:31
- - Ace   małe obiekciki - najprosciej by bylo potraktowac j...   11.12.2005, 16:25:37
- - Ludvik   Rzecz w tym, aby nie tworzyć niepotrzebnych grup, ...   11.12.2005, 17:44:10
- - Ociu   Myślę, że można zrobić tak: Groups Kod| id | name...   11.12.2005, 17:48:45
- - Ludvik   A jak ktoś zechce dodać możliwośc przenoszenia? Mo...   11.12.2005, 18:01:03
- - halfik   ta ta tabela z rolami jest to chrzanu. wlasnie o ...   16.12.2005, 19:19:20
- - ebe   U mnie jest tak 3 akcje podstawowe, add, edit, del...   16.12.2005, 19:40:33
- - Ludvik   Hmmm... trochę niejasny ten opis dla mnie, przynaj...   17.12.2005, 21:05:03
- - splatch   uprawnienia ograniczone do read, write, delete to ...   19.12.2005, 09:37:11
- - sopel   Cytat(splatch @ 2005-12-19 09:37:11)Moim zdan...   19.12.2005, 10:27:49
- - NuLL   Cytatta ta tabela z rolami jest to chrzanu. wlasn...   19.12.2005, 10:36:27
- - bela_666   Ja tam wiem jak to rozwiązać Mamy sobie globalny ...   19.12.2005, 13:55:33
- - Ludvik   CytatCytat ta ta tabela z rolami jest to chrzanu. ...   19.12.2005, 17:20:21
- - sopel   hmmm, przyznam ze do konca nie przemawia do mnie, ...   19.12.2005, 19:21:14
- - Ludvik   Nie chodzi o samo wywoływanie akcji, ale dostęp do...   19.12.2005, 19:41:45
- - bela_666   Cytat(Ludvik @ 2005-12-19 18:20:21)Bela666: J...   19.12.2005, 21:55:15
- - Ludvik   Z tą różnicą, że znowu musisz się bawić w porównan...   19.12.2005, 22:04:01
- - eai   Ja rozwiązałem całość w ten sposób. tabela groups...   20.10.2006, 13:27:00


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: 4.10.2025 - 11:28