Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Widoczność menu w zależności od uprawnień
Forum PHP.pl > Forum > Przedszkole
-Jasiu-
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.
viking
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
-Jasiu-
Ale ja nie piszę w Zendzie. Czyste PHP.
viking
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
thek
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.
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.