Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne] Jak rozwiązać system uprawnień dla różnych użytkowników?
Forum PHP.pl > Forum > Przedszkole
Micchaleq
Witam serdecznie,

Borykam się z pewnym problemem, chciałbym sobie to jakoś w głowie ułożyć zanim przejdę do pisania kodu.

Mam strone zabezpieczoną logowaniem itp. chciałbym sobie na niej stworzyć moduł uprawnień, tak bym głowny administrator mógł nadawać i zmieniać uprawnienia dla danych użytkowników ( grup do których należą ).
Otóż mam napisane w jednym pliku np class.user metody : dodawanie, usuwanie, edycja.

W czym tkwi największy problem w jaki sposób mogę dynamicznie zmieniać jako administrator te uprawnienia w kodzie wynikowym ( widocznym przez administratora było by to proste, ale nie bardzo wiem jak to zapisać i gdzie umieścić. A jak wyżej wynika nie chce robić tego na sztywno bo można walnąć if( użytnownik nie jest w tej grupie) echo nie masz uprawnien; else :

Uprawnienia :
- dodawnia grupa 1 - lista rozwijana z widocznością wszystkich grup
- usuwanie grupa 1
- edycja grupa 2

PS: podobne uprawnienia są na forach, że jedni użytkownicy widzą dany temat a inni nie.
Rid
Cytat
W czym tkwi największy problem w jaki sposób mogę dynamicznie zmieniać jako administrator te uprawnienia w kodzie wynikowym ( widocznym przez administratora było by to proste, ale nie bardzo wiem jak to zapisać i gdzie umieścić.

Wydaje mi się ,że najlepszym rozwiązaniem byłoby zbudowanie osobnej strony administratora z wbudowanymi polami wyszukiwania,edycji i zmiany statusu danego użytkownika.
sadistic_son
Najprostsza metoda jest zastosowanie w tabeli users dodatkowego pola np. privilages. Tam wstawiasz cyfry np. 1- admin, 2 -moderator, 3 - vip, 4 - user itd. Przy logowaniu zapisujesz przywilej danego usera do sesji a potem to juz tylko ifami sprawdzasz albo switchem:
  1. if($_SESSION['privilage']=='1'){
  2. //tylko dla admina
  3. }
  4. if($_SESSION['privilage']<='2'){
  5. //admin + moderator
  6. }
  7. if($_SESSION['privilage']<='3'){
  8. //admin, mod, vip
  9. }
  10. if(isset($_SESSION['privilage'])){
  11. //dla wszystkich
  12. }
Ot cała filozofia smile.gif

EDIT: Chociaż jak teraz jeszcze raz przeczytałem Twój post to chyba jednak nie wiem o co Ci dokładnie chodzi.
Robert3d
yy chodzi ci o sam zapis uprawnień w którym miejscu i jak to zrobić? i potem zmianę?

w bazie danych "login" "hasło" i 3 kolumna "nr uprawnień"
potem przy logowaniu pobiera login hasło i nr uprawnienia i zapisuje go do jakiejś zmiennej globalnej.

jest to opisane z pewnością w książce z serii WROX PHP i MySql od podstaw tylko po co jak wszystko już wiesz wink.gif

PS Chyba że pytałeś o coś innego
Hpsi
Ja bym zrobił to tak
1. w bazie trzymałbym spis modułów :
id / nazwa / ścieżka url albo ścieżka do pliku
2. stworzył bym grupy
id / nazwa
3. w uzytkownikach stworzyłbym dodatkowe pole "grupa"
4. stworzył system uprawnień do grup
grupa_id / modul_id

Wtedy ustawiasz dostęp grupą, a użytkowników przypisujesz do grup ...

Micchaleq
Chyba nie napisałem tego do końca jasno,

Mam już użytkowników oraz grupy w które są oni podzieleni.

To co wyżej kolega napisał chyba nie zda egzaminu ponieważ tak jak napisałem w class user mam 3 metody dodawania, edycji usówania
( z tą klasą to podałem przykład, bo może być to np klasa dodawania newsów na stronę )

Po wejściu w panel adminia ( gdzie już musi być wiadomo czy ten użytkownik ma jakiekolwiek uprawnienia ) przez użytkownika kowalskiego chce by mógł widzieć tylko to na co zezwolił mu administrator i tak by jak kowalski zacznie rozrabiać głowny admin w każdej chwili odebrał mu prawo do robienia głupstw.

Ewentualnie zastanawiałem się jeszcze nad wysyłaniem do przeglądarki get i dodanie do bazy danych wszystkie moduły, ale wydaje mi się, że nie sprawdzę które moduły będzie mógł przeglądać dany użytkownik.


I nie chodzi mi o to jak nadać uprawnienia bo zamierzam to robić tak :
jeżeli użytkownik jest w danej grupie i ten moduł ma dla niego jakieś uprawnienia to wyświetlam uprawnienia.
Sam sens że nie wiem jak zorganizować te uprawnienia modułów a na sztywno nie chce tego przypisywać.

bo zawsze mógłbym dać id($g.username != 2) echo nie masz uprawnień; // zamiast tej 2 musi jakoś pobierać informacje
Hpsi
Cytat
Mam już użytkowników oraz grupy w które są oni podzieleni.

Jeśli to masz to , to pytanie jak jest zrobiony podział na grupy? przechowujesz dane w bazie ?
Cytat
To co wyżej kolega napisał chyba nie zda egzaminu ponieważ tak jak napisałem w class user mam 3 metody dodawania, edycji usówania
( z tą klasą to podałem przykład, bo może być to np klasa dodawania newsów na stronę )

Tego w ogóle nie rozumiem? Class user wg mojego rozumowania powinna się odnosić TYLKO I WYŁĄCZNIE do zarządzania użytkownikami, jesli tak jest to w czym problem dopisać przypisania do grup.
Ale z tego co wnioskuje, choć troszkę zawile to napisałeś u Ciebie class user = zarządzanie nowościami w której masz 3 metody odnośnie edycji ich - dobrze rozumiem?
Jeśli tak to przemyśl troszkę zasade działania twojego systemu bo uważam, że nie jest ona dobrze przemyślana w takim wypadku byś musiał to na sztywno zrobić
Micchaleq
Witam,

może wyjaśnie w ogóle co to jest.
Napisałem strone internetową do forum phpbb, gdzie mam już użytkowników i podział ich na grupy więc tym się nie zajmuje.

Dokładnie mam klase player gdzie przechowuje metody, dodawania gracza, usuwania, edycji oraz wyświetlania wszystkich graczy.

Strona aktualnie korzysta tylko z wyświetl gracza.
Aktualnie jeszcze nie mam ale zostanie stworzona zakładka panel gdzie będzie można właśnie edytować stronę przez grupy uzytkowników. I tu zaczynają się schody tak bym mógł zmieniać im prawa i tak by widzieli tylko to co mogą robić.

Teraz wpadłem na pewien pomysł, gdzie w parametrach metody podawałbym dodatkową wartość ( $level ) i w grupach ( w bazie danych ) mógłbym wówczas dodać pole level i jeżeli by te 2 parametry były takie same to wtedy można korzystać z funkcji. A wartość level mogłaby być zapisywana w pliku albo w ogóle w bazie danych. Tyle tylko że każda z metod musiała by mieć osobną wartość w bazie danych.

Ewentualnie mógłbym chyba pozmieniać troche jak kolega wyżej mówił metody w klasach i zamienić je na usówanie, edycje i dodwanie, ale nie jest to też do końca dobre bo jeżeli jakaś grupa miała by dostęp do edycji to musiała by móc wszystko usuwać albo coś tam innego.

Chodzi mi raczej o coś takiego jak w panelu w konfiguracji ustawnień aby było widać :
Dodawanie newsów - wybierz grupe
Edycja Playerów - grupa 1
dodawanie playerów - grupa 4

Tylko nie jest to do końca takie rozwiązanie chyba jak oczekuje.

Hpsi
W takim razie byś mógł rozbudować pomysł który dałem wcześniej:
Masz grupy i moduły każdy z modułów ma osobne funkcje (które definiujesz sobie np 1 - dodawanie, 2 - usuwanie, 3 - edycja )
Przypisujesz sobie przykładowo tak
Grupa | modul | ogolne_zezwolenie | zezwolenie do konkretnych funkcji

przykładowo do grupy nr 1 i modułu nowości
mam takie wpisy
grupa = 1, modul = nowosci , ogolne_zezwolenie = tak , zezwolenie do konkretnych funkcji: przechował bym to np w tablicy w serialize wiec przykładowo array(1=> true, 2=>false, 3=> true);
i tak samo robisz do reszty modulow i grup
w kodzie sprawdzasz if($grupa['ogolne_zezowlenie'] == 'tak ) -> zezwalasz na działanie z modułu, później bierzesz unserialize do zezwoleń grupy, i pozwalasz im robić tylko i wyłącznie to co na co maja zezwolenia.

nie wiem , może źle myślę ale wydaje mi się to najprostrza a zarazem w miare sensowna opcja.
thek
Pytanie... Na jakim poziomie rozdrobnienia uprawnień chcesz "utknąć"? Czy wszyscy użytkownicy w danej grupie mają te same uprawnienia, czy przewidujesz sytuację, gdy jakiś użytkownik choć ma to samo co inni, może jeszcze coś innego?

Przypuśćmy masz grupę player ale z jakichś powodów kilku userów ma pośród nich mieć uprawnienie do czegoś, czego inni nie mogą, ale nie jest to na tyle ważne, by nadawać im grupę moda, który ma o wiele większe uprawnienia. Przypuśćmy mają oni mieć dostęp do określonego podforum, normalnie niewidocznego dla innych.

Jeśli tak to zastosowałbym ACL zhierarchizowany z dziedziczeniem i kontrolą na poziomie zasobów. Przykładowo dla danego użytkownika o ciut wyższych uprawnieniach utworzyłbym grupę, która dziedziczyła by po użytkowniku wszystkie uprawnienia, ale dodatkowo określałbym (choćby checkboxami) dodatkowe uprawnienia jak choćby do odczytu określonego subforum. Pewnym problemem jest zapis tabeli uprawnień wtedy, by było to w miarę uniwersalne. Musiałbyś bowiem wprowadzić oznaczenia dla określonych modułów lub funkcji i dodatkowo potem ich elementów oraz uprawnień. Bo co Ci z tego, że ktoś ma prawo do odczytu tematów publicznych na forum, skoro może dostać prawo do odczytu JEDNEGO tematu z forum, do którego nie ma nikt dostępu, a tym samym ma mieć możliwośc jego obejrzenia, mimo faktu iż do samego podforum nie ma uprawnień. W efekcie musi się mu wygenerować link do podforum ale wewnątrz jedynie jeden link. Lub też jeden dodatkowy panel na forum gdzie będa wrzucone wszystkie tematy, do których ma dodatkowe uprawnienia. Wszystko zależy od koncepcji więc...
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.