![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 17.04.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Kombinuje prawie caly dzien nad systemem uprawnien do panelu administracyjnego. Generalnie ma byc kilka grup (niezarejestrowani, zwykli userzy, moderatorzy, admini itd.), grupy beda dawaly tylko ogolne uprawnienia (np. dostep do komentarzy, dostep do panelu administracyjnego, ...). Glownie mam problem z ulozeniem sprawnego systemu uprawnien do panelu administracyjnego. Na stronie jest przewidzianych kilkanascie dzialow na poczatek, z czasem bedzie ich przybywac. W kazdym dziale beda: tabele ligowe, wyniki, statystyki, sklady druzyn, profile graczy itd. I teraz chodzi o to, zeby w panelu administracyjnym indywidualnie ustalac dla kazdego uzytkownika dostep do poszczegolnych czesci. Skorzystalem z pomyslu kurtza z potegami dwojki, oto jak to sobie rozlozylem: [php:1:cc5f9c6fa9] // Poszczegolne podsekcje dla dzialu w panelu adm. A - wyniki + statystyki : array("2","32","64","128","2048","4096","8192","32768"); B - kontuzje + transfery : array("4","32","256","512","2048","4096","16384","32768"); C - tabele : array("8","64","256","1024","2048","8192","16384","32768"); D - sklady + profile graczy : array("16","128","512","1024","4096","8192","16384","32768"); // Wszystkie kombinacje uprawnien jako kolejne potegi 2 // 1 - A = 2 // 2 - B = 4 // 3 - C = 8 // 4 - D = 16 // 5 - A+B = 32 // 6 - A+C = 64 // 7 - A+D = 128 // 8 - B+C = 256 // 9 - B+D = 512 // 10 - C+D = 1024 // 11 - A+B+C = 2048 // 12 - A+B+D = 4096 // 13 - A+C+D = 8192 // 14 - B+C+D = 16384 // 15 - A+B+C+D = 32768 [/php:1:cc5f9c6fa9] Ponizej wersja 'na szybko' zmiany uprawnien dla uzytkownika: [php:1:cc5f9c6fa9] <?php if( !isset($_POST['go']) ) { ?> <form action=up.php method=post> <table> <tr><td><input type="checkbox" name="upr[]" value="A"></td><td>Wyniki + statystyki</td></tr> <tr><td><input type="checkbox" name="upr[]" value="B"></td><td>Kontuzje + transfery</td></tr> <tr><td><input type="checkbox" name="upr[]" value="C"></td><td>Tabele</td></tr> <tr><td><input type="checkbox" name="upr[]" value="D"></td><td>Sklady + profile graczy</td></tr> </table> <input type=hidden name=go value=ok> <input type=submit> </form> <?php } else { $rights = array( "A" => "2", "B" => "4", "C" => "8", "D" => "16", "AB" => "32", "AC" => "64", "AD" => "128", "BC" => "256", "BD" => "512", "CD" => "1024", "ABC" => "2048", "ABD" => "4096", "ACD" => "8192", "BCD" => "16384", "ABCD" => "32768"); $tmp = ''; for( $i=0; $i<count($_POST['upr']); $i++ ) { $tmp .= $_POST['upr'][$i]; } echo $rights[$tmp]; } ?> [/php:1:cc5f9c6fa9] W bazie beda tabele z uprawnieniami dla uzytkownika w danym dziale: Kod user_id | section_id | user_rights
np. 1 | 1 | 32768 No i przy wejsciu na stronke sprawdzamy poziom uzytkownika z wymaganym dla danej stronki, np. [php:1:cc5f9c6fa9] <?php $required = array("2","32","64","128","2048","4096","8192","32768"); $user_right = 128; // wybierane z bazy oczywiscie if( array_search($user_right,$required) ) { echo "Masz dostep"; } else { echo "Nie masz dostepu"; } ?> [/php:1:cc5f9c6fa9] No i to tak mniej wiecej chyba tyle, co sadzicie o takim rozwiazaniu? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Uważam, że dobry to pomysł, ale od kiedy 1 ^ 2 = 2? :-)
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 10.03.2003 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Cytat Wszystkie kombinacje uprawnien jako kolejne potegi 2
Więc chodzi raczej o 2^1, a to równa się 2 ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
No tak, sorry.
Ale mogłoby być jeszcze 2^0=1. -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 31.07.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Witam
Przeglądam ten temat i zastanawiam się po co się męczyć i co ważniejsze po co męczyć bazę danych z przechowywaniem dużej ilosci danych, a pięć znaków przy czterech kategoriach wydaje mi się za dużo. Skoro mamy kategorie A, B, C, D to uprawnienia do nich można zapisać w postaci 0 i 1 gdzie 0 - brak dostępu, a 1 - dostęp dozwolony czyli jeśli zezwolimy na dostęp do kategorii A i C to otrzymamy 1010, ABCD otrzymamy 1111. W tym momencie łatwo dodać następne kategorie EFGH. Nawet nie chcę liczyć jakby wyglądał dostęp do tych kategorii w postaci potęgi 2. Co więcej otrzymując prawa w postaci zero-jedynkowej otrzymujemy jakąś liczbe w postaci binarnej więc łatwo korzystając nawet już z wbudowanych konwerterów w php zamienić ją na wartośc np. szesnastkową co nam zdecydowanie zmniejsza miejsce zajmowane w bazie np. dla Bin: 1111 HEX: F, więc dla 4 kategorii wystarczy jeden znak. Na swoje potrzeby napisałem własny konwerter zdaję się, że do postaci 215-tkowej, ale nie pamiętam dokładnie. Teraz wchodząc na strone wystarczy sprawdzić jakie mamy prawa, jakich wymaga konketna część strony i porównać np. [php:1:c8383bc1bf]<?php $wymagane="3"; // czyli dostęp do C $prawa="1011"; // pobrane z bazy i zmienione do postaci binarnej if($prawa[$wymagane-1]=="1") echo "Masz dostep"; else echo "Nie masz dostepu"; ?>[/php:1:c8383bc1bf] Być może nie zauważyłem jakichś dodatkowych możliwości rozwiazania sivyer'a więc poprawcie mnie jeśli się myle, ale to które ja przedstawiam wydaje mi się bardziej funkcjonalne szczególnie przy wiekszej ilości kategorii tj. ABCDEFGHIJKL ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 13:20 |