Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Rozróżnianie administratorów
tomsi
post
Post #1





Grupa: Zarejestrowani
Postów: 379
Pomógł: 45
Dołączył: 30.06.2007

Ostrzeżenie: (10%)
X----


Chciałem się Was poradzić jak rozwiązać następujący problem:

chciałem na swojej stronie zrobić administrację dla kilku typów i liczby administratorów. Jeden administrator główny miałby możliwośc robienia wszystkiego na stronie (dodawanie zdjęć, news'y, nowe kategorie w menu itd). Dodatkowo na stronie w panelu było by miejsce na rejestrowanie nowych administratorów (oczywiście ich konto zaczęło by działac po zatwierdzeniu przez głównego administratora), ale moje pytanie jest jak zrobić żeby np. administrator_pomocniczy_1 miał możliwośc tylko dodawania zdjęć a administratr_pomocniczy_2 tylko news'ów? J

ak to porządnie zorganizować?


--------------------
Jeśli Ci pomogłem kliknij "Pomógł"
Jeśli Ty mi pomogłeś kliknę "Pomógł"
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Zrobic lvl np:
Super admin: 4lvl
Admin: 3lvl
Mod: 3lvl
User: 1lvl

Albo zrobic sesje z prawami np
  1. <?php
  2. $_SESSION['opt'] = 'prawa|prawa2'
  3. ?>


Robic explode() dla sesji i sprawdzac za pomoca in_array() czy jest dana opcja jak jest mozna robic jak nie to error


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Pilsener
post
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Najlepszą opcją jest oparcie struktury serwisu o drzewo - czyli np. artykuły to kategoria nr 5, która może mieć dowolną liczbę podkategorii. Teraz robisz sobie tabelę:

ID kategorii||login/ID usera||podgląd||edycja||itd. - rodzaje uprawnień

Zamiast rozbijać na pogląd/edycja itp. możesz zrobić flagi - np. od a do z i każda litera to inny zestaw uprawnień.
Pamiętaj też o dziedziczeniu uprawnień - ktoś kto ma zablokowany dostęp do kategorii wyżej, nie może przeglądać tych niżej i odwrotnie - dobrze by było, żebyś mógł nadać np. osobie xyz uprawnienia edycji do kategorii "Artykuły" i wszystkich podkategorii - wtedy po dodaniu podkategorii uprawnienia byłyby dziedziczone i nie musiałbyś ich znowu nadawać.

Da się to zrobić - ale wymaga to pracy oczywiście.
Go to the top of the page
+Quote Post
Axexis
post
Post #4





Grupa: Zarejestrowani
Postów: 98
Pomógł: 14
Dołączył: 13.01.2008
Skąd: Birmingham

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


Dużo prościej (co nie znaczy wydajniej) jest dorobienie po prostu kilku komórek w bazie danych.
Tj, że zamiast standartowego "login, password, email, level" itp dodać "can_addnews, can_addphotos, can_managegallery" itp.

Później tylko sprawdzać czy admin "can" i już smile.gif


--------------------
  1. root@php.pl:~# rm -fr /


be. confused
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #5





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Najprościej to przed button czy cokolwiek co wywołuje dalsze przejście do opcji edycji dodać w kodzie.
  1. <?php
  2. if($zmienna > 0){
  3. //wywołanie twojego butona1 prowadzącego gdzie trzeba
  4. }
  5. if($zmienna > 1){
  6. //wywołanie twojego butona2 prowadzącego gdzie trzeba
  7. }
  8. ?>

W bazie przy użytkowniku np. dodajesz pole
  1. [upr]
i jeżeli ktoś mam mieć uprawnienie do czegoś to uzupełniasz

No i przy logowaniu dodajesz warunek w którym pobiera wartość z pola upr (bądź osobnym zapytaniem) i np. wrzucasz sobie wynika dla upr do sesji aby nie powtarzać zapytania.

I to jest chyba najmniej inwazyjna metoda w gotowy kod jaka przychodzi mi na myśl winksmiley.jpg

Ale lepiej zainwestować w czas jeśli ma być to coś większego i potworzyć normalny system grupowy itd...

Ten post edytował Wykrywacz 7.11.2008, 12:42:31
Go to the top of the page
+Quote Post
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(Axexis @ 7.11.2008, 10:46:00 ) *
Dużo prościej (co nie znaczy wydajniej) jest dorobienie po prostu kilku komórek w bazie danych.
Tj, że zamiast standartowego "login, password, email, level" itp dodać "can_addnews, can_addphotos, can_managegallery" itp.

Później tylko sprawdzać czy admin "can" i już smile.gif


Drugo spodob o ktorym napisalem to jest wlasnie to mysle ze obydwa moje sposoby sie sprawdzaja uzywalem i obydwoch i bylo GIT


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #7





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Cytat
Drugo spodob o ktorym napisalem to jest wlasnie to mysle ze obydwa moje sposoby sie sprawdzaja uzywalem i obydwoch i bylo GIT

Git? w czym? używaniu like?
Wszystko w tym wypadku jest gitarra o ile nie musisz używać tego do więcej niż kilku opcji. Bo potem naraz tworzy ci się zylion kolumn, ify też ci się rozrastają bo zamiast zrobić
np. 5 >$uprawnienia >1, to tworzysz cztery warunki z and....
to jak naprawianie auto poksyliną ;P

Ten post edytował Wykrywacz 7.11.2008, 15:25:53
Go to the top of the page
+Quote Post
Malvegil100
post
Post #8





Grupa: Zarejestrowani
Postów: 40
Pomógł: 1
Dołączył: 15.10.2008

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


  1. <?
  2. if (($_SESSION['dostep'] == 'Admin') OR ($_SESSION['dostep'] == 'Moderator')) {
  3. //tresc
  4. } else { echo 'Nie masz tu czego szukac';}
  5. ?>


Gdzie $_SESSION['dostep'] (pobierane jest z db z komórki 'poziom_dostepu' przy logowaniu) to:
- Admin
- Moderator
- VIP
- User
Go to the top of the page
+Quote Post
bim2
post
Post #9





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


O boshe, ja mam tabele id_usera|action|method

I 'WHERE user_id=1 AND action = "news" AND method = "add"', później if mysql_num_rows>0 to uprawnienia są. Oczywiscie działa to w każdą stronę tj. można to przerobić na uprawnienia grup. Dać foreach($upr AS $v) { } i jak napotka w jakimś false to znaczy, ze uprawnień nie ma. :]


--------------------
Go to the top of the page
+Quote Post
marcio
post
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
Git? w czym? używaniu like?
Wszystko w tym wypadku jest gitarra o ile nie musisz używać tego do więcej niż kilku opcji. Bo potem naraz tworzy ci się zylion kolumn, ify też ci się rozrastają bo zamiast zrobić
np. 5 >$uprawnienia >1, to tworzysz cztery warunki z and....
to jak naprawianie auto poksyliną ;P


Czy ty w ogole wiesz co mowisz?

Kod logowania nie z zbyto rozbudowany:
  1. <?php
  2. if(!empty($_POST['login']) && !empty($_POST['pass']) && isset($_POST['loguj'])) {
  3.  
  4.  
  5. if($db = mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo'])) {
  6.  mysql_select_db($pasy['baza']);
  7.  
  8. $login = filtruj(strip_tags($_POST['login']));
  9. $pass = filtruj(addslashes(htmlspecialchars(md5($_POST['pass']))));
  10.  $zap = ('select * from przegladarka where login = "'.mysql_real_escape_string($login).'" limit 1');
  11.   $wynik = mysql_query($zap, $db);
  12.    
  13. $tab = mysql_fetch_assoc($wynik);
  14.  
  15. if($tab['login'] == $login && $tab['pass'] == $pass) {
  16.  
  17.   setcookie("user", $login, time() + 3600);
  18.   setcookie("kod_id", $tab['kod'], time() + 3600);
  19.   setcookie("uprawnienia", $tab['uprawnienia'], time() + 3600);
  20.  
  21.   header("Location: url2.php") or die();
  22.  
  23.  
  24. }
  25.  
  26. else echo('<table align="center"><tr><td class="contents" align="center"><b style="color:#f00">Podales zly login i/lub haslo.</b></td></tr></table>');
  27. }
  28. else echo('<table align="center"><tr><td class="contents" align="center"><b style="color:#f00">Polaczenie z baza niemozliwe.</b></td></tr></table>');
  29. }
  30. ?>


Samo sprawdzanie praw podczac jakiejs czynnosci wyglada tak:
  1. <?php
  2. //na samym poczatku strony
  3.  
  4. $function = explode('|', $_COOKIE['uprawnienia']);
  5.  
  6. //np sprawdzanie czy sa prawa podczac tworzenia miniaturek:
  7.  
  8. if(!empty($_POST['x']) && !empty($_POST['y']) && isset($_POST['resize'])) {
  9.  
  10. if(in_array('presizer', $function)) {
  11.  
  12.  
  13. $x = (int)$_POST['x'];
  14. $y = (int)$_POST['y'];
  15.  
  16. if(is_integer($x) && is_integer($y)) {
  17.  
  18.  
  19. if($_POST['new_y'] == 'yes') $new_name_file = $_POST['new_name']; else $new_name_file = $_POST['old_name_file'];
  20.  
  21. resize($_POST['old_name_file'], $_POST['extension'],$x, $y, $new_name_file, $_POST['quality']);
  22.  
  23.    }
  24. else echo('<table align="center"><tr><td align="center"><b style="color: #000000">Zly typ danych dla szerokosci i wysokosci img.</td></tr></table>');
  25.  }
  26. else echo('<table align="center"><tr><td align="center"><b style="color: #000000">Nie masz uprawnien.</td></tr></table>');
  27. }
  28. ?>


Prawa w bazie wygladaja tak prawo|inne_prawo|etc...

Dodaje prawa user'ow za pomoca checkbox'ow bo mam taka potrzebe w moim systemie plikow oczywiscie mozna je inaczej przypisywac

Co do prawa numerycznych tak samo to wyglada jest kolumna Prawa a w niej wartosci od 1 do 4 przy kazdej czynnosci jest sprawdzenie czy $_COOKIE['prawa'] > 4 zeby robic czynnosci Administratora

Oczywiscie wszystkie jest bezpieczne gdy na kazdej stronie jest sprawdzenie czy dane z cookie sa takie same jak te z bazy, i nikt nie mowi o tworzeniu kilkanascie kolumn to ty to sobie ubzdurales.

Cytat
Gdzie $_SESSION['dostep'] (pobierane jest z db z komórki 'poziom_dostepu' przy logowaniu) to:
- Admin
- Moderator
- VIP
- User

Oczywiscie takie cos jest wolniejsze niz operacje na INT ale i tak nie widac roznicy biggrin.gif

P.S zreszta kazdy ma swoje moetody i dla niego wlasna jest zawsze najlepsza wystarczy ja dobrze zabezpieczyc a implementacja zalezy juz od czlowieka

Ten post edytował marcio 7.11.2008, 16:24:07


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
tomsi
post
Post #11





Grupa: Zarejestrowani
Postów: 379
Pomógł: 45
Dołączył: 30.06.2007

Ostrzeżenie: (10%)
X----


Widze, że jest parę odpowiedzi teraz muszę wybrać to najprostsze i najwygodniejsze...

~Pilsener
czyli zrobić w bazie, czyli najwanzijeszy amdin dodaje mniej waznego i daje mu uprawnienia i dodaje sie do bazy w polu edycja wartosc 1 czyli bedzie mogl edytować, w usuwaniu 1 bedzie mogl usuwac. Dobrze rozumiem? Jeśli tak to trochę by się to skomplikowało bo trzeba by rozróżniać edycje, np. zdjęć a wiadomości itd

~Wykrywacz
trochę nie rozumiem Twojego rozwiązania


--------------------
Jeśli Ci pomogłem kliknij "Pomógł"
Jeśli Ty mi pomogłeś kliknę "Pomógł"
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 Aktualny czas: 20.08.2025 - 21:46