![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
chciałbym kontynuować wątek dotyczący kontroli dostępu w aplikacjach php, dlatego wszystkich, którzy nie zapoznali się z poprzednią częścią zachęcam do przeczytania http://forum.php.pl/index.php?showtopic=38...trola+dost%EApu Poniżej przedstawię mój sposób na taką kontrolę (mam na myśli strukturę bazy) a przy okazji kilka pytań, które mnie dręczą. Przypadek I: Grupy opisane rolami. Mam 3 tabele (z przykładowymi danymi): account Kod account_id | login | password |blocked| expired | gropus | ------------------------------------------------------------------------------- 1 | admin | pass | 0 | 0 | Administratorzy | 2 | jas | fasola | 0 | 0 | Marketing:Handlowy | 3 | ptasiek | ptasiek | 0 | 0 | Sprzedaż:Księgowość | groups Kod group_id | group_name | group_description | roles | -------------------------------------------------------------------------------------------------------- 1 | Administratorzy | Administratorzy systemu | Role1:Role2:Role3:Role4:Role5:Role6:Role7:Role8 | 2 | Marketing | Dział marketingu | Role1:Role2 | 3 | Handlowy | Dział handlowy | Role3:Role4 | 4 | Sprzedaż | Dział sprzedaży | Role5:Role6 | 5 | Księgowość | Dział księgowośći | Role7:Role8 | roles Kod role_id | role_name | role_description | -------------------------------------------- 1 | Role1 | Jakieś uprawnienie 1 | 2 | Role2 | Jakieś uprawnienie 2 | 3 | Role3 | Jakieś uprawnienie 3 | 4 | Role4 | Jakieś uprawnienie 4 | 5 | Role5 | Jakieś uprawnienie 5 | 6 | Role6 | Jakieś uprawnienie 6 | 7 | Role7 | Jakieś uprawnienie 7 | 8 | Role8 | Jakieś uprawnienie 8 | Proces autoryzacji wyglądałby mniej więcej tak: 1. Użytkownik podaje login i hasło 2. Po uprzedniej filtracji danych $_POST wykonujemy zapytanie SQL "coś na kształt":
3. a) Jeżeli ilość zwróconych rekordów wynosi 0 -> nieudane logowanie (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) Jeżeli ilość zwróconych rekordów wynosi 1: - Jeżeli wartość blocked=1 -> konto zablokowane (oczywiście jakieś przekierowanie) - Jeżeli wartość expired=1 -> ważność hasła wygasła (forwardowanie do akcji zmiany hasła) c) Jeżeli brak przypadku b to jesteśmy zalogowani i: 4) Za pomocą explode() rozbijamy wartość groups na tablice i tworzymy zapytanie SQL wyciągające role z każdej grupy. Role wrzucamy do tablicy(po usunięciu ewentualnych powtórzeń), którą zapisujemy ją jako zmienną sesyjną. Dotarłem do miejsca, w którym występują 2 problemy i chciałbym się poradzić Was o jakieś optymalne rozwiązanie. Problem 1. Administrator kasuje grupę Handlowy. Jak się pozbyć z tabeli account wpisów tej grupy? Podaczas poprawnego zalogowania tworzyć tablicę nieistniejących grup i je kasować? Zastanawiam się jak bardzo może to obciążyć skrypt (rozważam dyżą aplikacje) Problem 2. Jak zapisać zależności miedzy dostępnymi akcjami i wymaganymi uprawnieniami? Zapisywanie wymaganych uprawnień na stałe w kodzie mija się z celem. Dwie możliwość: - baza (przy każdym wywołaniu akcji, kontroler wykonuje zapytanie do bazy aby sprawdzić jakie role potrzebne są do wykonania danej akcji.. Minus: kolejne zapytanie.. - Jakaś tablica asocjacyjna z takimi zależnościami.. Minus: Łatwa zmiana takiego pliku z configiem... Pomysł z parametryzowaniem ról nawet mi się podoba. Struktura bazy nie zmieniłaby się, z tym że role byłyby zapisywane w ten sposób: Kod 2 | Marketing | Dział marketingu | Role1(*):Role2(1,2,3), Role3(only_own) | W tym przypadku pojawia się jeszcze jeden problem: Jak zdefiniować "podział" na sekcje do których taka rola (np. Role2(1,2,3) ) odwołuje się? Mam nadzieje, że nie zamotałem za bardzo. Bardzo proszę o jakieś uwagi/pomysły.. Pozdrawiam Ten post edytował Jarod 9.04.2007, 13:43:10 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 2.10.2025 - 20:08 |