Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: Zend ACL + moduły

Witam serdecznie,

mam problem z zend ACL - chodzi o proste ograniczenie listy dostępu do określonych zasobów. Mianowicie mam 3 moduły:

- default
- user
- admin

w każdym z nich są kontrolery i widoki.
Moim problemem jest określenie dostępu do danego modułu dla danego usera. W tym wypadku chciałbym by użytkownik "guest" miał dostęp do akcji w module default, użytkownik "user" do default i user, zaś admin do wszystkich z nich. Dodam iż w każdym z modułów mogą być takie same nazwy kontrolerów.

Moje pytanie jest jak takie coś wykonać ?
Troszkę w necie poczytałęm o zend_acl ale niestety zaimplementowanie tego okazało się cięższe niż myslałem :)

konto usunięte

Temat: Zend ACL + moduły

Możesz zrobić to mniej więcej tak (w dużym uproszczeniu):
1. Pomyśl nad strukturą acl.ini, który przechowuje uprawnienia:

; Role ACL
role.guest = null ; gosc nie dziedziczy uprawnien
role.member = guest; member dziedziczy po gosciu
role.editor = member;
; itd.

; Zasoby ACL
; Uprawnienia dla modułu default, kontrolera index, akcji show dla goscia
resource.default.index.show.allow = guest
resource.default.auth.login.allow = guest
; Zabronienie uprawnień dla roli member, kontroler profile, akcja show
resource.user.index.show.deny = member

To powyższe to radosna twórczość - możesz dowolnie sobie określić strukturę pliku.
2. Na podstawie pliku stwórz obiekt Zend_Acl (później dla wydajności można go zserializować zamiast przy każdym żądaniu zczytywać plik i tworzyć obiekt Zend_Acl)
3. Mając obiekt uprawnień stwórz plugin do swoich kontrolerów/głównego kontrolera, który na podstawie danych z requesta (moduł/kontroler/akcja) oraz roli użytkownika np. z sesji sprawdza w obiekcie Zend_Acl, czy jest dostęp, czy też nie.
4. Potem przydałby się jakiś przyjazny interfejs ;-)
Andrzej Błaszczyk

Andrzej Błaszczyk Programowanie,
e-marketing,
e-commerce

Temat: Zend ACL + moduły

To ja się podepnę z moim pytaniem - robił już ktoś z Was ACL oparty o bazę danych wraz z mechanizmem do edycji?

Zastanawiam się nad rozwiązaniem, gdzie określam w bazie tylko miejsca do których user ma dostęp.
Wyobrażam to sobie jako drzewo gdzie przy każdym elemencie jest checkbox i o to aby dla potomka w dostępie zaznaczyli się jego rodzice dba już js.

Co myślicie o takiej koncepcji?

konto usunięte

Temat: Zend ACL + moduły

Edytowalne zasoby rozwiązałem w bardzo prosty sposób. Każda akcja jest zasobem o identyfikatorze moduł_kontroler_akcja. Od strony formularza wygląda to tak:

-moduł
--kontroler
----akcja
----akcja
--kontroler
----akcja
----akcja
moduł
--kontroler
...

Zaznaczenie modułu spowoduje zaznaczenie wszystkich kontrolerów w tym module, a zaznaczenie kontrolera powoduje zaznaczenie wszystkich akcji w kontrolerze.Maciej Wilgucki edytował(a) ten post dnia 24.08.10 o godzinie 19:23

konto usunięte

Temat: Zend ACL + moduły

Takie coś ostatnio wysmarowałem

http://wklej.org/id/380624/


resources.frontController.plugins.acl = Plugin_Acl

konto usunięte

Temat: Zend ACL + moduły

Andrzej Błaszczyk:
To ja się podepnę z moim pytaniem - robił już ktoś z Was ACL oparty o bazę danych wraz z mechanizmem do edycji?

Zastanawiam się nad rozwiązaniem, gdzie określam w bazie tylko miejsca do których user ma dostęp.
Wyobrażam to sobie jako drzewo gdzie przy każdym elemencie jest checkbox i o to aby dla potomka w dostępie zaznaczyli się jego rodzice dba już js.

Co myślicie o takiej koncepcji?

Robię bardzo podobnie - w panelu administracji użytkownik ma interfejs w postaci drzewka (korzystam z Doctrine nested set), gdzie ustala dostęp zasób-rola. Po zapisie wszystko idzie do bazy (aby ponownie w dość czytelny sposób wyświetlić użytkownikowi) oraz generuję plik acl.ini (co nieco wyżej: http://www.goldenline.pl/forum/1881634/zend-acl-moduly.... W trakcie działania aplikacji do oprócz wspomnianego interfejsu baza nie jest wykorzystywana, a zserializowany obiekt Zend_Acl.
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: Zend ACL + moduły


Takie coś ostatnio wysmarowałem

wklej.org/id/380624/


dzięki, twój kod naprowadził mi na błąd który popełniałem ;)
Pozdrawiam

Następna dyskusja:

Aplikacje oparte na Zend Fr...




Wyślij zaproszenie do