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 |
|
|
|
![]() |
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 |
|
|
|
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
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 ![]() ![]() |
|
Aktualny czas: 17.12.2025 - 12:46 |