Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rangi
Forum PHP.pl > Forum > PHP
Wieviór
Do tej pory pisząc przeróżne panele administracyjne używałem prostego sposobu z numerkami, szło w górę i po prostu zwiększały się uprawnienia.

Teraz szukam czegoś bardziej skomplikowanego. Żeby łatwo można było wybrać, co dany użytkownik może robić. W php-Fusion widziałem w tabeli users, w polu uprawnień mniej więcej taki zapis:

Kod
A.B.C.D.H.L.K.W.Z


Domyślam, się że każda literka po prostu odpowiada jakiemuś blokowi akcji w adminie. Pytanie moje natomiast polega na tym, czy to dobry sposób na stosowanie przywilejów i jak to z bazy dobrze wyciągać dla użytkownika.
sf
Wg mnie nie. Najlepiej zastosowac do tego np. 4 tabele :
- uzytkownicy ( uzytkownik_id, grupa_id)
- grupy_uzytkownikow ( grupa_id )
- prawa ( prawo_id )
- grupa_uzytkownika_posiada_prawo ( grupa_id, prawo_id )
Jen
A co w przypadku gdy uzytkownik nalezy do wiecej niz jednej grupy?
cicik
Cytat(Jen @ 18.09.2006, 16:43:42 ) *
A co w przypadku gdy uzytkownik nalezy do wiecej niz jednej grupy?


- uzytkownicy ( uzytkownik_id)
- grupy_uzytkownikow ( grupa_id )
- uzytkownik_nalezy_do_grupy(uzytkownik_id, grupa_id)
- prawa ( prawo_id )
- grupa_uzytkownika_posiada_prawo ( grupa_id, prawo_id )

Standardowy sposob na relacje wiele do wielu
Jen
No tak, encja intersekcji czy tam tabela asocjacyjna, ale to moze dawac ilosc_grup x ilosc_uzytkownikow rekordow. Sporo, choc nieskomplikowanych. To taka tylko dygresja.
cicik
Cytat(Jen @ 18.09.2006, 17:04:52 ) *
No tak, encja intersekcji czy tam tabela asocjacyjna, ale to moze dawac ilosc_grup x ilosc_uzytkownikow rekordow. Sporo, choc nieskomplikowanych. To taka tylko dygresja.


Może dawać tyle rekordów jeżeli każdy użytkownik będzie należał do każdej grupy ale nie ma co czarować. Standardowy sposób (i jedyny możliwy) w modelu relacyjnym.
batman
A nie prościej byłoby zastosować takie coś?
  1. <?php
  2. define('MANAGE_USERS',1);
  3. define('MANAGE_DOCS',2);
  4. define('MANAGE_IMG',4);
  5. define('MANAGE_MAIL',8);
  6. /* itd */
  7. ?>


W tabeli, np tabuser masz następujące pola:
- iduser,
- slogin,
- nrules

W pole nrules wpisujesz sumę wartości dziesiętnych zdefiniowanych stałych. Np chcesz by użytkownik jan.kowalski mógł zarządzać dokumentami i pocztą. Przypisujesz mu wartość 10 (2 + 8). By sprawdzić jakie prawa przysługują danemu użytkownikowi, robisz cos takiego:

  1. <?php
  2. // $row - array z info o uzytkowniku, wyciagniety z bazy
  3. if($row['nrules'] & MANAGE_USERS) { /* ... */}
  4. if($row['nrules'] & MANAGE_DOCS) { /* ... */}
  5. // itd
  6. ?>


Sposób jest dobry przy niewielkiej ilości zdefiniowanych stałych. Wystarczy jednak trochę pokombinować, a da się z niego wycisnąć znacznie więcej winksmiley.jpg
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.