Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] System uprawnień użytkowników
Forum PHP.pl > Forum > PHP
MateuszRyaN
Witam. Chciałbym zaprojektować system uprawnień dla użytkowników korzystających ze skryptu.
Założenie jest takie: są twa typy kont: user i root. Root jak wiadomo posiada nieograniczone prawa dostępu. Root ma dostęp powiedzmy do "panelu użytkowników" w którym ma możliwość ograniczenia "userom" dojścia do pewnych modułów skryptu.

Zastanawiałem się w jaki sposób zaprojektować tabele w bazie.
Myslałem mniej więcej o czymś takim:

tabela `users`
user_id | access | nick
1 | root | nick1
2 | user | nick2


No i teraz tabela access, chcę aby użytkownik o nicku nick2 miał możliwość kożystania tylko z modułu 1 i 2: ( 1 - może , 0 - nie może)
tabela `access`
user_id | mod1 | mod2 | mod3
1 | 1 | 1 | 1
2 | 1 | 1 | 0

Robiliście coś takiego?? Nie mam pomysłu na inne rozplanowanie, a dodam że modułów jest około 20stu. No chyba, że jeszcze ewentualnie:
user_id | val
1 | 110101011011011101011
i potem użycie np funkcji str_split. Doradźcie coś.
tehaha
witaj, oba Twoje pomysły wydają mi się słabe, bo są bardzo "sztywne". Nie wiem jak dużej kontroli potrzebujesz, ale jeżeli to tylko 2 rodzaje kont i jakieś proste operacje to ja bym to zrobił tak:

Tabela users:

ID | type | nick

1 | root | nick1
2 | user | nick2

Tabela access_modules (ta tabela przechowuje moduły w panelu admina):

ID | name

1 | Użytkwonicy
2 | Posty
3 | Ustawienia

Tabela access_actions (ta przechowuje możliwe czynności jakie użytkownik może wykonać w panelu)

ID | name

1 | view
2 | add
3 | update
4 | delete

Tabela access:

ID | user_id | module_id | action_id

1 | 1 | 1 | 1

gdzie:
- module_id -> ID modułu z tabeli access_modules
- type_id -> ID działania z tabeli access_actions

I teraz np. przy logowaniu jeżeli typ konta to 'root' to pobierasz wszystkie czynności jakie są dla niego dozwolne i przykładowo formujesz z tego tablicę wielowymiarową

  1. $_SESSION['priviliges'] = array
  2. (
  3. 'users' => array('view', 'add', 'update', 'delete'),
  4. 'settings' => array('view'),
  5. );


Kiedy użytkownik będzie chciał wykonać operację to sprawdzasz czy ma takie uprawnienie np.

  1. if(isset($_SESSION['priviliges']['users']['add']))
  2. {
  3. $userClass->add($_POST['name']);
  4. }
  5. else
  6. {
  7. echo 'Sory nie masz uprawnień, aby to zrobić.';
  8. }


Oczywiście to tylko taki pseudo kod, powinieneś to ładnie rozplanować i opakować w klasy. Jeżeli potrzebujesz czegoś bardziej rozbudowanego poczytaj o rozwiązaniach ACL w frameworkach takich jak Kohana, Zend, CodeIgniter itd. lub innych gotowych już bibliotekach.
krispak
Moja propozycja robiona na szybko wink.gif

Tabela uzytkownicy
Id | idGroup | Nick
np.
1 | 1 | Uzytkownik1

Tabela uprawnienia
Id | Grupa | Access
np. z okresleniem nazwy/identyfikacji modułu oraz prawami 1 - Tak, 0 - Nie
1 | Root | mod1:1,mod2:1,mod3:0
lub np. z okresleniem tylko identyfikacji modułu, jezeli znajduje sie na liscie znaczy ze modul dostepny czyli mod1, mod2 sa dostepne a mod3 niedostepny
1 | Root | mod1, mod2

Teraz jezeli jest logowanie sprawdzamy do jakiej grupy nalezy dany uzytkownik i tworzymy sesje z uprawnieniami, np. dla przykladu pierwszego $_SESSION['perm']["mod1"] = 1, $_SESSION['perm']["mod2"] = 1, $_SESSION['perm']["mod3"] = 0, dla przykladu drugiego $_SESSION['perm']["mod1"] = 1, $_SESSION['perm']["mod2"] = 1

Powiedzmy funkcja sprawdzajaca
  1. function perm($action)
  2. {
  3. if (isset($_SESSION['perm']["".$action.""]) && $_SESSION['perm']["".$action.""] == 1) return true;
  4. return false;
  5. }


Wykorzystanie
  1. if(perm('mod1'))
  2. {
  3. //Skrypt modulu
  4. } else {
  5. echo "Brak dostepu";
  6. }

Maly pseudokod wink.gif Pozdrawiam
MateuszRyaN
Dzieki za zainteresowanie. Zwykle robiłem drobniejsze rzeczy i wystarczało mi po prostu root i user ;P Ale podoba mi sie 1sze rozwiązanie. Pokombinuje coś w ten deseń smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.