Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Widoczność menu w zależności od uprawnień
--Jasiu--
post
Post #1





Goście







Witam,
Mam menu składające się z kilku elementów. Jednak chciałbym aby ich wyświetlanie było uwarnkowane od roli użytkownika w systemie. Id roli użytkownika przechowuje w tabeli, a następnie przypisuje je do jakieś zmiennej w aplikacji. I teraz pytanie: Czy mam obsłużyć to instrukcją if, że jeśli Id-roli=1 to wyświetla to i to itd? Czy może jakoś lepiej można to zrobić. Póki co mam 3 role w aplikacji.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Zawsze to można zrobić lepiej. Zależy jaki jest Twój poziom. Przykładowo: http://framework.zend.com/manual/1.12/en/z...troduction.html


--------------------
Go to the top of the page
+Quote Post
--Jasiu--
post
Post #3





Goście







Ale ja nie piszę w Zendzie. Czyste PHP.
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Pytanie było "Czy może jakoś lepiej można to zrobić". Akurat Zend_Acl jest niezależnym komponentem. A jak nie to w sieci znajdziesz całe mnóstwo klas http://stackoverflow.com/questions/4415663...php-application


--------------------
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Niedawno w aplikacji też robiłem wyświetlanie pozycji menu w zależności od roli. U mnie było to nieco bardziej zakręcone. Rzadko bowiem który link jest tam jednoznaczny. Prowadzi on bowiem najczęściej do "linka agregującego", z którego dopiero można się dalej rozejść. Tak czy inaczej przebywanie na stronie z url, który jest "agregowany" przez określony element menu - podświetla go. Twój problem jest szczególnym jego przypadkiem, gdzie masz relację 1:1 do linka docelowego (brak linków agregowanych dodatkowo).

U mnie menu było dość statyczne, więc zawarłem strukturę w pliku konfiguracyjnym i dla każdeo najbardziej oddalonego liścia zdefiniowałem 2 indeksy: access i forbidden, wzajemnie się wykluczające (albo istnieje jeden albo drugi). Te, które zdefiniowane są w access, mogą dany element menu widzieć, pozostałe - nie. Te obecne w forbidden - nie, pozostałe - tak. Dodatkowo zrobiłem tak, że w trakcie generowania struktury sprawdzam, czy po operacjach związanych z uprawnieniami link "stracił" wszystkie związane z nim routingi. Jeśli tak, znikał z zasięgu widoczności. Bo po co wyświetlać pusty element menu, który stracił elementy docelowe? Posuwając się w górę można całkowicie "wyciąć" nawet całe, duże gałęzie. Oczywiście można optymalizować na poziomie każdego elementu, na każdym poziomie zagłębienia. Dla małych menu można jednak śmiało to zapamiętać i wrzucić do cache'u.

Utrzymanie takiego menu jest proste. Nowy element menu ma po prostu tablicę z określonym specyfikatorem i rolami które go tyczą. Brak przypisania ról czy specyfikatora to domyślnie brak uprawnień dla wszystkich lub widoczność tylko dla admina (ja wolę elementowi ją jawnie przypisać).. Próba wywołania linka o określonym routingu i jego nie znalezienie pośród wszystkich nie podświetlało nic. To co ja pisałęm ustawiało klasę active elementowi menu i można to było ręcznie na kilka sposobów zmieniać. Dopiero niepoprawne działanie tutaj mogło się zakończyć wyjątkiem.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
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: 22.08.2025 - 09:36