Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: batman, dodany: 19.05.2011 18:00, tagi: zend_framework

Zend_Acl jest jednym z komponentów Zend Frameworka, bez których tworzenie rozbudowanych aplikacji byłoby znacznie trudniejsze. W skrócie Zend_Acl dostarcza informację o tym, czy rola ma dostęp do zasobu. Utworzenie zależności między rolami oraz zasobami spoczywa na naszych barkach, podobnie jak wykonanie odpowiedniej akcji w przypadku braku dostępu. Manual świetnie opisuje sposoby dodawania ról, zasobów oraz zależności między nimi. Niestety ani słowem nie wspomina o sposobie wykorzystania tej wiedzy w prawdziwej aplikacji.

Definiowanie zasobów i ról

Pierwszym etapem w tworzeniu aplikacji korzystającej z Zend_Acl jest określenie ról oraz zasobów występujących w aplikacji. Sposobów przechowywania tych informacji jest kilka, od plików ini począwszy, na bazie danych kończąc. Ponieważ sposoby te różnią się od siebie tylko sposobem przechowywania danych, do przykładów będę stosował pliki ini.

Zdefiniujmy najpierw zasoby.

acl.resources[] = "index_index"
acl.resources[] = "user_list"
acl.resources[] = "user_edit"
acl.resources[] = "user_add"
acl.resources[] = "user_delete"

Jak zapewne się domyślacie, pierwszy człon nazwy zasobu określa nazwę kontrolera, drugi nazwę akcji. Jeśli w aplikacji występują moduły, przez nazwą kontrolera można dodać kolejny człon oznaczający nazwę modułu.

Role definiujemy w podobny sposób.

acl.roles[] = "admin"
acl.roles[] = "user"
acl.roles[] = "guest"

Na koniec pozostaje zdefiniowanie praw dostępu

acl.privileges.admin[] = "index_index"
acl.privileges.admin[] = "user_list"
acl.privileges.admin[] = "user_edit"
acl.privileges.admin[] = "user_add"
acl.privileges.admin[] = "user_delete"
acl.privileges.user[] = "index_index"
acl.privileges.user[] = "user_list"
acl.privileges.guest[] = "index_index"

Powyższy schemat dodawania ról, zasobów oraz uprawnień ma ta zaletę, iż w przypadku szybko rosnącej aplikacji można go bez problemowo przenieść np. do bazy danych, napisać prosty panel do zarządzania i zapomnieć o uzupełnianiu danych “z palca”.

Tworzymy ACL

Najlepszym miejscem do utworzenia Zend_Acl jest bootstrap.

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAcl()
    {
        $acl = new Zend_Acl();
        $aclOptions = $this->getOption('acl');

        foreach($aclOptions['roles'] as $role) {
            $acl->addRole(new Zend_Acl_Role($role));
        }

        foreach($aclOptions['resources'] as $resource) {
            $acl->addResource(new Zend_Acl_Resource($resource));
        }

        foreach($aclOptions['privileges'] as $role => $resource) {
            $acl->allow($role, $resource);
        }

        return $acl;
    }
}

Dlaczego właśnie bootstrap? Ponieważ w prosty sposób bez konieczności korzystania z rejestru możemy dostać się do obiektu Zend_Acl oraz bootstrap wykonuje się zawsze wykonuje jako pierwszy.

Warto wykorzystać tutaj cache, ponieważ generowanie całej listy ACL przy każdym żądaniu może mieć wpływ na wydajność aplikacji.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Michal Wachowski, dodany: 18.05.2011 18:36, tagi: php

Dalszy ciąg prac nad frameworkiem. Kolejny etap - routing, czyli przyjemne interpretowanie i tworzenie przyjaznych linków na potrzeby frameworka.

Autor wpisu: Tomasz Kowalczyk, dodany: 17.05.2011 23:24, tagi: symfony, javascript, php

Framework symfony to bezsprzecznie jeden z najlepszych frameworków, jakie miałem okazję testować. Zarówno poziom zaawansowania kodu, jak też łatwość tworzenia nowych funkcjonalności w stronach internetowych czynią go naprawdę genialnym narzędziem w rękach programisty. W dzisiejszym wpisie chciałbym pokazać, jak w prosty sposób zintegrować edytor WYSIWYG - CKEditor z polami <textarea> w poszczególnych modułach panelu administracyjnego [...]

Autor wpisu: batman, dodany: 17.05.2011 08:00, tagi: css

Internet Explorer 6 odchodzi na emeryturę. Czy zasłużoną, zbada jakaś komisja, która zrobi z tego medialny cyrk. Nieco w cieniu swojego starszego brata, nadal straszy IE7 i nie ma najmniejszego zamiaru przestać. Skoro wszyscy uwzięli się na “szóstkę”, “siódemka” ma jeszcze sporo luzu i daje popalić bogu ducha winnym frontendowcom. Jednym z ukrytych talentów IE7 jest nierespektowanie z-index dla pozycjonowanych elementów.

Na czym polega problem? Na pewno nie raz się z nim spotkaliście – menu z uporem maniaka nie chce zasłonić listy rozwijanej (popularnego selecta) lub chowa się pod inne elementy strony i za żadne skarby nie daje się przekonać do poprawnego wyświetlenia. Winowajcą jest tutaj bug w IE7 powodujący, że z-index jest resetowany dla pozycjonowanych elementów nie znajdujących się w tym samym pojemniku.

Okazuje się, że rozwiązanie tego problemu jest o wiele bardziej banalne niż mogłoby się wydawać. Zapomnijcie o iframe’ach, skryptach JavaScript ukrywających elementy strony, magicznych zaklęciach i wymyślonych w gniewie przekleństwach. Wystarczy ustawić wartość relative dla właściwości position kontenerów zawierających niepoprawnie wyświetlające się elementy. Dokładny opis tego “ultimate solution” znajdziecie pod adresem http://jonathanstegall.com/2009/01/15/ie-z-index-bug-with-css-dropdown-menu/.

Enjoy.

Autor wpisu: sokzzuka, dodany: 16.05.2011 16:33, tagi: php

Już niedługo – 31 maja (wtorek) w Klubie Lizard King w Krakowie (ulica Św. Tomasza 11a) odbędzie się piąty KrakSpot Tech. Jest to spotkanie ludzi z branży technologicznej utrzymane w luźnej atmosferze tzw. Bar Camp. Oznacza to mniej więcej tyle, że można, a nawet zalecane jest spożywanie w jego czasie złocistego napoju (bez przesady oczywiście). Dodatkowym atutem tego spotkania jest DARMOWA PIZZA dla wszystkich uczestników. Spotkanie nie wymaga rejestracji.

Dlaczego wspominam o tym evencie na swoim blogu ? Szczęśliwie się składa, że wygłoszę na nim swoją prezentację na poruszany już tutaj temat bazy danych MongoDb. Oczywiście oprócz mojej prezentacji będzie jeszcze kilka ciekawych rzeczy, oto program:

1. Prezentacje:

Jacek Czarnecki z  Empathy „Dlaczego HTML 5, a nie Flash?” Wojtek Soczyński  z SoInteractive „Alternatywne podejście do bazy danych – MongoDb” Grzegorz Szczepańczyk z Hidden Data „Akcja wirtualizacja: efektywne wykorzystywanie zasobów” Łukasz Cepowski z iLoop Mobile „Praktyczna realizacja rozproszonego klastra do budowania i testowania projektu informatycznego

2. Panel dyskusyjny:

iOS vs. Android” prowadzony przez Krzysztofa Helaka

Uważam, że program jest ciekawy dla każdego kto w jakikolwiek sposób związany jest z branża internetową od strony technologicznej. Warto się wybrać i serdecznie zapraszam wszystkich.

Jeżeli ktoś by chciał wziąć udział w panelu dyskusyjnym to polecam zapisać się pod adresem marketing@empathy.pl .

Więcej informacji na stronie spotkania (rejestracja nie jest obowiązkowa)

http://www.empathy.pl/pl/aktualnosci/rok2011.html

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Tomasz Kowalczyk, dodany: 15.05.2011 21:40, tagi: css, jquery

Wizualny aspekt stron internetowych to dosyć skomplikowany temat - po pierwsze ze względu na różne gusta klientów / użytkowników, po drugie ze względu na dużą trudność w uzyskaniu jednakowego wyglądu na wielu wersjach przeglądarek. Dlatego ważne jest, żebyśmy cały czas podnosili swój poziom wiedzy i doświadczenia poprzez poznawanie nowych sposobów i mechanizmów tworzenia dobrych rozwiązań. [...]

Autor wpisu: batman, dodany: 15.05.2011 20:45, tagi: php

W jednym z ostatnich komentarzy pod wpisem Agile Toolkit – interesujący framework PHP napisałem, że framework ten nie do końca spełnia pokładane w nim przeze mnie nadzieje. Postanowiłem dać mu jeszcze jedną szansę i spędziłem z nim nieco więcej czasu niż poprzednio. Tym razem przygotowałem od zera najprostszą z możliwych aplikacji, które nie robi nic innego ponad wypisanie w przeglądarce tekstu “Hello World”. Od razu zaznaczę, iż podtrzymuję opinię, że jest to framework w wersji beta.

Instalacja

Instalacja frameworka wbrew pozorom nie jest taka banalna jakby się mogło na początku wydawać. Wszystko zaczyna się od pobrania najnowszej wersji frameworka i rozpakowania go do katalogu znajdującego się na serwerze. W tym samym miejscu musimy utworzyć plik index.php oraz katalogi lib, page oraz templates.

Konfigurowanie projektu

Na serwerze znajdują się już wszystkie niezbędne pliki i katalogi, pora przejść do konfiguracji naszej aplikacji. Najpierw musimy utworzyć główną klasę, powołującą naszą aplikację do życia. Nie będę tutaj oryginalny i posłużę się nazwą z dokumentacji. Klasa wygląda w sposób następujący, a jej położenie to stworzony wcześniej katalog lib.

class Frontend extends ApiFrontend
{
    public function init()
    {
        parent::init();
        $this->initLayout();
    }
}

W zależności od zapotrzebowania, klasa może dziedziczyć po jednej z kilku przygotowanych na różne okoliczności klas. Mamy do dyspozycji ApiWeb, ApiCli, ApiAdmin oraz ApiFrontend. Sami również możemy przygotować odpowiednią klasę.

Główną klasę wywołujemy w pliku index.php

include 'atk4/loader.php';
$app = new Frontend('my_project', 'my_theme');
$app->main();

Najbardziej interesującym elementem na powyższym listingu jest drugi parametr przekazany do konstruktora. Określa on nazwę skórki/tematu (theme) z jakiego będziemy korzystać w aplikacji. Jak za chwilę się dowiecie, tematy są całkowicie odseparowane od reszty kodu, dzięki czemu łatwo je podmieniać.

Ostatnim etapem konfigurowania projektu jest utworzenie katalogu o nazwie tematu (tutaj jest to my_theme) w katalogu templates.

Pierwsza strona

Framework zainstalowany, projekt skonfigurowany, można przystąpić do pracy. Zaczniemy od przygotowania pierwszej (i jedynej) strony. W katalogu page utwórzmy plik index.php, a do środka wprowadź następującą treść

class page_index extends Page
{
    public function init()
    {
        parent::init();
        $this->add('HtmlElement');
    }

    public function defaultTemplate()
    {
        return array('page/index');
    }
}

Zgodnie z konwencją przyjętą w Agite Toolkit, index jest domyślą stroną i jest wymagany do poprawnego działania aplikacji.

Treść do strony dodawana jest w metodzie init, przy czym musimy pamiętać, aby wywołać metodę init rodzica. W sumie Agile Toolkit na każdym kroku wymaga aby wywołać metodę rodzica. Po pewnym czasie staje się to dosyć irytujące. Druga metoda jest wymagana tylko jeśli chcemy oprócz treści wygenerowanej przez stronę dodać dodatkowe informacje do szablonu.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.