Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem ze strukturą drzewa i uprawnieniami, Czy da się sprawdzać w zapytaniu nadrzędne kategorie?
Pilsener
post 14.10.2008, 10:21:49
Post #1





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

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


Witajcie, niestety trochę Was pomęcze - mam strukturę zasobów opartą o drzewo:
filmy id 1
-sensacyjne id 2
-dramat id 3
-dla dzieci id 4
--rysunkowe id 5
--fabularne id 6

Każdy zasób ma swoje ID, a tabela wygląda tak:
id||typ_zasobu||id_rodzic||sciezka||glebokosc||nazwa||opis
Np. dla zasobu "fabularne" glebokosc = 2 a sciezka: 1.4 - są to pola pomocnicze ułatwiające zarządzanie całą strukturą -reszta pól nie wymaga chyba komentarza.

Chcę to połączyć z tabelą uprawnień i sprawdzać rodzaj uprawnień dla każdego zasobu (np. edycja, kasacja etc.), tabela uprawnień wygląda normalnie:
login||id_zasobu||edycja||kasacja etc.

Otóż dopiero tu pojawia się problem, bo wymyśliłem sobie, że uprawnienie może mieć 3 statusy: brak, tylko dla danej kategorii oraz dla kategorii niżej - jest to wygodne, bo admin doda zwykłemu użytkownikowi w kategorii "filmy" uprawnienia dla niższych kategorii i nie musi już ich nadawać oddzielnie - MOŻE, ale nie musi, czyli wejdzie sobie do poszczególnych podkategorii i da np:
abc||1||2||... - edycja kategorii "filmy" i wszystkich podkategorii
abc||3||1||... - tylko kategoria "dramat" - bez podkategorii
abc||6||0||... - brak dla kategorii "fabularne" i wszystkich podkategorii
Jest to niezwykle wygodne, ale ma swoją wadę - aby sprawdzić, czy użytkownik ma uprawnienia dla danej kategorii muszę grzebać w kategoriach nadrzędnych, robię to specjalną funkcją, która pobiera ścieżkę typu 1.4.56, rozbija ją i przeszukuje te kategorie - jednak funkcja taka generuje nawet kilkanaście zapytań do bazy i oczywiście należy to przemnożyć razy liczbę zasobów wyświetlanych na stronie, co w sumie może generować nawet kilkaset zapytań worriedsmiley.gif

Moje pytanie brzmi tak - czy da się skontruować takie zapytanie, które "przeszuka" tabelę pobierając uprawnienie na podstawie loginu i id? - przykładowa tabela zasobów, interesują mnie uprawnienia dla zasobu 99:
id||typ_zasobu||id_rodzic||sciezka||glebokosc||nazwa||opis
1||2||||sciezka||0||glowna||glowna
---
99||2||23||1.9.16.23||4||test||test

Natomiast w tabeli uprawnienia mamy:
login||id_zasobu||edycja
abc||9||2
- dozwolona jest edycja zasobu 9 i wszystkich kategorii poniżej - da się zrobić takie zapytanie bez konieczności rozbijania ścieżki i wstawiania jej elementów do zapytań w pętli? Akurat w tym przypadku zapytanie ma zwrócić 2. A np. w tym:
abc||16||1 - 0 (bo nie ma uprawnienia dla kategorii niżej)
abc||99||1 - 1 (bo jest uprawnienie dla tej konkretnej kategorii)
abc||99||2 - 2
Najgorsze w tym jest to, że uprawnienia w kategoriach wyżej mogą być dowolne - trzeba przeszukiwać "od dołu" - jeśli nie ma uprawnienia dla kategorii 99, to szukamy wyżej - dla kateogrii 23 - jeśli i tam nie ma to dla 16, jak są to je pobieramy, niezależnie od uprawnień, które są w kategoriach 1 i 9 - boję się, że zapytaniem do bazy nie da się tego zrobić. Mam nadzieję, że naswietliłem problem dość jasno winksmiley.jpg

Edit: problem częściowo rozwiązałem, wrzucam wszystkie ID kategorii ze ścieżki do zapytania, sortuje, następnie sprawdzam w pętli, jeśli znajdzie uprawnienie w kategorii nadrzędnej to przerywa wykonywanie pętli. Co prawda kod PHP się rozrósł, ale zapytań do bazy mniej - jak ktoś przeczyta i wpadnie na jakiś lepszy pomysł, to będę wdzięczny, pozdrawiam.

Ten post edytował Pilsener 14.10.2008, 14:18:47
Go to the top of the page
+Quote Post

Posty w temacie


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: 21.06.2025 - 06:01