Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Rangi, Bardziej skomplikowany
-Wieviór-
post 14.08.2006, 19:44:00
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 15.08.2006, 08:53:41
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 )


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
Jen
post 18.09.2006, 15:43:42
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 18.09.2006, 15:49:41
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


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post
Jen
post 18.09.2006, 16:04:52
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 18.09.2006, 16:15:26
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.


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post
batman
post 18.09.2006, 16:44:43
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 winksmiley.jpg


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 11:07