Dziś jest wtorek, 7 października 2008 roku (z kalendarza...)

OPT i autoryzacja

Icon

18.01.2008, 16:09

Projekty

Komentarze (2)

Powrót

Choć sesja w pełni, OPT nie jest do końca martwy. W tramwaju czy w autobusie jest nieco wolnego czasu akurat by pomyśleć nad kształtem projektu. Ostatnio rozmawiałem z bratem na temat dwóch nowych rzeczy; jedną zaproponował on i niezbyt mi się spodobała, drugą zaproponowałem ja i nie spodobała się jemu. Postanowiłem więc poddać obie rzeczy pod publiczną dyskusję.

Zaczniemy w kolejności chronologicznej. Rzecz pierwsza to tzw. nazywane parametry funkcji. W dotychczasowym kodzie funkcje wywołuje się dokładnie tak samo, jak w PHP - w nawiasach podajemy listę argumentów oddzieloną przecinkami i musimy pamiętać ich kolejność. eXtreme proponował, aby można było przypisywać wartości także według nazwy parametru, coś na kształt poniższego: funkcja(parametr1 := wartość, parametr2 := wartość, parametr3 := wartość). Pomysł byłby niegłupi, gdyby nie ograniczenia techniczne powodujące sprzeczność z samą ideą funkcji w OPT. Funkcja jest zrobiona tak, że od strony szablonu w ogóle nie musimy przejmować się, gdzie została ona zaimplementowana: normalnie w skrypcie, w silniku PHP, w pluginie czy też może jest metodą statyczną (tak, jest taka możliwość :)). Gwarantowała to uniwersalna składnia oraz możliwość przypisania jej innej nazwy w momencie rejestrowania, niż miał oryginał. Co więcej, składnia ta była przenośna, bowiem identycznie wyglądało odwoływanie się do metod. Nazywanych parametrów nie da się wprowadzić do wszystkich tych rodzajów i nagle zaczyna nabierać znaczenia ich rzeczywista postać funkcji, dotąd przed twórcą szablonu schowana. W grę przy odczytywaniu dozwolonych nazw parametrów wchodziłoby ReflectionAPI (bez obaw - miałoby to miejsce tylko raz, w czasie kompilacji, a tam specjalnie się wydajnością nie trzeba martwić). Sytuację komplikuje dodatkowo wprowadzenie przestrzeni nazw w PHP 5.3, a biblioteka musi być z tą wersją kompatybilna. Mamy więc:

  1. Funkcje w aktualnej przestrzeni nazw - da się uzyskać listę nazw parametrów.
  2. Funkcje w innej przestrzeni - nie da się bez znajomości budowy skryptu. Przestrzeń nazw może być równie dobrze nazwą klasy statycznej. Aktualnie nie mam pojęcia, w jaki sposób przestrzenie nazw będą realizowane w Reflection API, a nawet gdyby były, kod musi być kompatybilny choć trochę wstecz.
  3. Metody statyczne - jw. tylko na odwrót. Nazwa klasy może być równie dobrze przestrzenią nazw, nie wiem, jak takowe będą obsługiwane, a kod musi być trochę kompatybilny wstecz.
  4. Metody w obiektach - nie ma szansy pobrania takich informacji bez posiadania obiektu, a poza sekcjami dynamicznymi w jednym z trybów nie ma obowiązku rejestrowania przed kompilacją wszystkich bloków, jakie są używane w szablonie. Ponadto skoro metoda zależy od obiektu, ciężko jest prorokować na podstawie jednego z nich, co może się trafić.

Ostatecznie zgodziłem się na następujący kompromis: nazywane parametry będą tam, gdzie jest taka możliwość, ale jako niestandardowe rozszerzenie składni, jako że kłóci się z założeniami OPT. Domyślnie będzie ono wyłączone, a gdyby komuś strzeliło do głowy napisać własną implementację OPT, nie ma obowiązku ich implementowania :).

Drugi pomysł jest mojego autorstwa i powstał z chęci oddzielenia szablonów od API skryptu, który ich używa. Wiele tego typu elementów już się w bibliotece znajduje: bloki językowe, instrukcja systemu stronicowania czy sekcje. Problem pojawia się w przypadku danych z systemu uprawnień. Przekazywanie każdej głupoty jako osobnego bloku jest dość męczące i stwarza ryzyko popełnienia błędów. Można udostępnić w szablonie cały obiekt, lecz wtedy wiążemy go na stałe z jednym, konkretnym API (a ja np. mam jedną szatę graficzną do panelu administracyjnego, która przeżyła już kilka zmian silników :)). Jeśli mamy szczęście mieć metody statyczne, wtedy rejestrujemy to jako funkcję i problemów jest trochę mniej. Natomiast ja pomyślałem następująco: w OPT mam dwa ograniczniki ciągów tekstowych, które poza wyglądem się niczym nie różnią. Jeden z nich można zaakceptować do systemu uprawnień. Oto próbka:

<opt:if test="`attachments`">
  ... wyświetl formularz dodawania załącznika
</opt:if>

Napis `attachments` zostanie przekonwertowany na wywołanie żądanej przez autora skryptu funkcji/metody i powinien on dać w efekcie wynik logiczny true lub false. Co myślicie o takich ulepszeniach?

Oczywiście gdyby ktoś nie chciał ani jednego, ani drugiego, z pomocą przyjdzie mu nowy OPT Toolset. Sądząc z opinii znalezionych w sieci, pomysł takiego preprocesora wycinającego z kodu to, co niepotrzebne, bardzo się ludziom spodobał i w nowej wersji narzędzie to będzie bardziej dopracowane. Na pewno pojawi się obsługa alternatyw, a być może także pobieranie i konfigurowanie w locie nowych wersji z sieci? Nowa domena i serwer są już załatwione. Oczekuję tylko na dokończenie szaty graficznej i zakończenie sesji, by się za to wziąć.

Powrót

Komentarze

Napisał Bob w poniedziałek, 21 stycznia 2008 o 15:36

Jak dla mnie oba pomysły chybione przy czym pierwszy zdecydowanie gorszy. Plus że chociaż nie będzie trzeba tego mieć "by default".

Napisał Zyx w środę, 23 stycznia 2008 o 22:08

Dobrze wiedzieć. Doszliśmy póki co do małego update-u. Zamiast na sztywno przypisywać, że odwrotne apostrofy będą odpowiadać za autoryzację, po prostu programista będzie mógł im sam zdefiniować znaczenie. Jak ktoś będzie chciał, to sobie prosto zrobi z tego autoryzację, zaś inny np. przystosuje do systemu językowego a'la gettext. Implementacja czegoś takiego to paręnaście linijek zaledwie.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia