Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Rangi, Bardziej skomplikowany
-Wieviór-
post
Post #1





Goście







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.

Ten post edytował Wieviór 14.08.2006, 19:49:18
Go to the top of the page
+Quote Post
sf
post
Post #2





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


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 )
Go to the top of the page
+Quote Post
Jen
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 25.02.2006

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


A co w przypadku gdy uzytkownik nalezy do wiecej niz jednej grupy?
Go to the top of the page
+Quote Post
cicik
post
Post #4





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

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


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
Go to the top of the page
+Quote Post
Jen
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 25.02.2006

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


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.
Go to the top of the page
+Quote Post
cicik
post
Post #6





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

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


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.
Go to the top of the page
+Quote Post
batman
post
Post #7





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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: 21.09.2025 - 17:33