Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] sesja w tablicy array
Forum PHP.pl > Forum > Przedszkole
Darekxp
Witam!

W mam tabele users, w niej pole userGroups. W polu tym przetrzymuje grupy np user,moderator,admin oddzielone przecinkiem.

Chciałbym pobrać te dane z sesji do tablicy i sprawdzić czy użytkownik ma prawo dostępu do danej strony. Niestety takie rozwiązanie w połączeniu z sesją nie działa.
Czy da się wstawić do tablicy dane z sesji w postaci takiej jak na poniższym przykładzie?
Bo gdy wstawię $grupaUsera = array($_SESSION['userGroups']; i mam grupy oddzielone przecinkiem, traktuje to jako jeden wyraz, a nie 3.
Trzeba użyć tu json, czy można to inaczej rozwiązać?

Za pomoc z góry dzięki:)

  1.  
  2. $grupaUsera = array('user','kierownik','zarzad');
  3.  
  4. $wymaganaGrupa ='superadministrators';
  5. $wymaganaGrupa2 ='administrators';
  6. $wymaganaGrupa3 = 'zarzad';
  7.  
  8. if( in_array($wymaganaGrupa,$grupaUsera) || in_array($wymaganaGrupa2,$grupaUsera) || in_array($wymaganaGrupa3,$grupaUsera) )
  9. {
  10. echo 'dostęp';
  11. }
  12. else
  13. {
  14. echo ' brak dostępu';
  15. }
Sephirus
explode() z tego co mi się wydaje powinno nieco Ci pomóc.

Tak w ogóle to masz IMHO źle zrobione grupy uzytkowników... i całe uprawnienia... smile.gif

Nie tak się to powinno robić że dany ZASÓB jest dostępny dla danej GRUPY ale to dana GRUPA powinna mieć dostęp do danego ZASOBU...

Zatem masz odwrotną relację.

Przy grupie powinno być zapisane czy ma dostęp do danej strony przykładowo. Wtedy możesz zrobić uprawnienia i kolejne grupy nawet w oparciu o dziedziczenie uprawnień.

Wtedy przy danym zasobie (na przykład zasobie o nazwie "a") nie sprawdzasz czy dany uzytkownik należy do grupy 1szej 2giej i 3ciej... tylko czy jego grupa (jedna - zawsze) ma uprawnienia do "a" wink.gif

Zapis uprawnień powinien być gdzies ładowany na początku - może być pobierany z bazy itd...

Przykładowo:

USER - dostęp do a, b, c
ADMIN - dostęp do a, b, c, p

sprawdzanie uprawnień powinno być zapisane w ten sposób przykładowo

  1. $userGroups = array(
  2. 'USER' => array('a','b','c'),
  3. 'ADMIN' => array('a','b','c','p')
  4. );
  5.  
  6. // i teraz dany użytkownik ma przypisaną do niego TYLKO JEDNĄ grupę - na przykład USER
  7. // wtedy sprawdzamy czy ma dostęp do zasobu/strony/modułu "a":
  8.  
  9. $uGroup = 'USER';
  10.  
  11. if(in_array('a',$userGroups[$uGroup])) echo 'treść a';
  12. else 'brak dostępu do a';
  13.  
  14. // itd...
Darekxp
Dzięki za pomoc, explode(); pomogło.

Co do grup, moim zdaniem użytkownik powinien mieć prawo przynależenia do wielu grup, a nie tylko do jednej. Wtedy daje to lepszą możliwość ustalania uprawnień. Bo dany moduł, część ukryta strony powinna być dostępna dla wielu grup, jeśli zajdzie taka potrzeba, a nie tylko do jednej.

W moim przykładzie definiuje na początku, które grupy mają dostęp do danego modułu, strony. A w Twoim przykładzie to danej grupie przypisuje się wszystkie strony, moduły, do których grupa ma dostęp.

Myślę, że moje rozwiązanie jest lepsze i szybsze w definiowaniu dostępu do danej części strony.
Sephirus
Ja się kłócić nie będę smile.gif

Cytat
część ukryta strony powinna być dostępna dla wielu grup


W moim przykładzie część ukryta strony jak najbardziej też może być dostępna dla wielu grup - wystarczy im dopisać każdej grupie dostęp do danej strony wink.gif

Cytat
Myślę, że moje rozwiązanie jest lepsze i szybsze w definiowaniu dostępu do danej części strony.


To załóżmy taki przykład

Mamy 10 stron (nie tyle stron co modułów - na przykład newsy, panel admina, itd...)

U mnie przy każdej ze stron piszę coś takiego na początki jedynie:

  1. if(!in_array('nazwa_strony',$privileges[$_SESSION['group_id']])) die('ACCESS DENIED');


Czyli pisze że jeśli dana strona nie jest zapisana w uprawnieniach grupy to wyrzucam tekst "ACCESS DENIED";

Tak samo jak Ty mam wszystkie uprawnienia spisane na początku.

Teraz twój kod:

  1. if(!in_array($wymaganaGrupa,$grupaUsera)) die('ACCESS DENIED');


Robię tak że sprawdzam czy w liście grup usera jest grupa, która jest wymagana aby mieć dostęp.

I teraz - wyobraźmy sobie że dodaję nową grupę smile.gif Która ma mieć dostep do danej strony.

U mnie - dodaje tylko i wyłącznie nową grupę na początku skryptu i wpisuje w niej uprawnienie do żądanej strony.

U Ciebie - dodajesz nową grupę, musisz odnaleźć daną stronę/moduł i w nim dodać uprawnienie że tak grupa też może oglądać zawartość.

Wydaje mi się jednak że moja (a tak naprawdę wcale nie moja) metoda jest jednak lepsza i o wiele bardziej skalowalna smile.gif

Jeśli chciałbyś swoją metodę przerobić tak by wszystkie uprawnienia co do stron były zapisywane na początku tak jak u mnie dokładnie to tak jak masz u mnie:

  1. 'user' => array(1,2,3,4,5,6),
  2. 'admin' => array(1,2,3,4,5,6,7,8,9),
  3. )


(gdzie 1-9 to moduły/strony)

to u Ciebie by to wyglądało tak:

  1. 1 => array('user','admin'),
  2. 2 => array('user','admin'),
  3. 3 => array('user','admin'),
  4. 4 => array('user','admin'),
  5. 5 => array('user','admin'),
  6. 6 => array('user','admin'),
  7. 7 => array('admin'),
  8. 8 => array('admin'),
  9. 9 => array('admin'),
  10. )


Oczywiście też tak można - ale mi osobiście bardziej podoba się metoda gdzie do grupy jest przypisany moduł bop u Ciebie trzeba wymienić wszystkie możliwe moduły jakie są - a modułów naogół jest więcej od grup (w dużych aplikacjach ze skomplikowanymi uprawnieniami).
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.