W pierwszej chwili można sobie pomyśleć, co ma piernik do wiatraka, ale jednak… Okazuje się, że w pewnych sytuacjach szablon Joomla! może przeszkodzić w działaniu systemu kontroli dostępu wbudowanego w Joomla!.

Aby w pełni zrozumieć ten wpis musisz wiedzieć, czym są Template Overrides w Joomla!. Robert Matuszewski już o tym napisał na swoim blogu, więc warto przeczytać, jeśli jest to dla Ciebie nowość.

Przejdźmy do sedna sprawy. Otóż po ustawieniu wszelkich praw dostępu do treści może się okazać, że użytkownik, który powinien mieć możliwość edycji artykułów ze strony frontowej nie widzi przycisku edycji. Wiele osób w tym momencie może stracić wiele godzin na próbach zażegnania problemu, gdyż rozwiązania należy szukać w dość nieoczekiwanym miejscu – w szablonie.

Poprawka

Na początek należy się przyjrzeć części kodu odpowiedzialnej za wyświetlanie linku edycji artykułu.

Plik: /templates/nazwaszablonu/html/com_content/category/blog_item.php

Szybka analiza kodu i już wiemy, że ikona edycji pojawia się tylko wtedy, gdy zmienna $canEdit ma wartość true. Aby zrozumieć, jak generowana jest wartość tej zmiennej przechodzimy na początek pliku, gdzie mma taki  kod:

Zdarzyć się może także taka wersja:

Oznacza to, że w tabeli z prawami dostępu sprawdzane jest, czy użytkownik ma prawa „edit” do tego artykułu. Jeśli tak jest, to zmienna zwróci true.

Problemem jest to, że oprócz prawa dostępu „edit” mamy również np. „edit own„, czyli możliwość edycji tylko własnych artykułów. W takim momencie zmienna przyjmie wartość „false„, co już jest problemem. Rozwiązaniem jest zamiana kodu w górnej części  pliku na:

co jest jednoznaczne ze sprawdzeniem wszystkich potrzebnych praw do treści. Mamy więc kuloodporne rozwiązanie.

Aby uniknąć podobnych problemów zawsze warto sprawdzać aktualizacje Template Overrides u dużych dostawców szablonów, którzy szybko łatają błędy. Dobrym pomysłem jest wrzucanie kolejnych wersji szablonów takich jak Gantry (RocketTheme) na Git i obserwowanie zmian w kodzie.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *