![]() |
![]() |
--Jasiu-- |
![]()
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. |
|
|
![]() |
![]()
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
-------------------- |
|
|
--Jasiu-- |
![]()
Post
#3
|
Goście ![]() |
Ale ja nie piszę w Zendzie. Czyste PHP.
|
|
|
![]()
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
-------------------- |
|
|
![]()
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
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 09:36 |