![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 234 Pomógł: 1 Dołączył: 29.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam do zrobienia aplikację. Aplikacja ma być dostępna tylko po zalogowaniu, podzieliłem na moduły ale zastanawiam się nad paroma rzeczami: Czy jeśli mam mam 2 moduły "biznesowe", to jak rozwiązać sprawę z uprawnieniami. Stworzyć dodatkowy moduł default i w nim acl czy do każdego modułu osobno ? Pytanie też odnośnie Zendowego ACL'a. Jak mają być wyświetlane produkty, które dany user może zobaczyć. W bazie jest tabela z userem i produktami, które może zobaczyć. Pytanie tylko jak to połączyć z ACL'em żeby wyświetlały mu się tylko te produkty, które są do niego przypisane ? Nie bardzo wiem jak wykorzystać do tego acl ? Jakiś helper ? Jakieś sugestie ? -------------------- najprostsze rzeczy są najmniej oczywiste
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
Powiedz jak zaimplementowałeś acl dla usera.
Możliwe że wystarczy coś w stylu: id, produkt_id, role_id A potem select z joinem. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 234 Pomógł: 1 Dołączył: 29.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
nic na razie nie implementowałem. Przymierzam się właśnie do tego, ale nie bardzo wiem jak to zrobić.
Ten post edytował Thuunder 24.08.2011, 13:37:22 -------------------- najprostsze rzeczy są najmniej oczywiste
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 11 Dołączył: 27.10.2010 Skąd: Kutno/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ja używam Acl razem z Zend_Navigation (pięknie się łączą). W produkcie możesz dodać jaki poziom uprawnień musi mieć użytkownik aby zobaczyć produkt. Więc, jeżeli produkt ma np. allow_for = 'privilege_a', to jest dostępny tylko dla użytkowników którzy mają uprawnienie 'privilege_a' lub dziedziczą z tego uprawnienia. Jeżeli masz grupę produktów, to proponuję Ci zostosować identyfikatory numeryczne, powiedzmy:
developer = 1 admin = 2 business = 3 standard = 4 demo = 5 guest = 6 i wtedy przy zapytaniach o produkty będziesz mógł zrobić tak:
Sposobów na zrobienie tego jest sporo. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 25.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mozesz utworzyc user'a ktory ma dostep do danego modulu, a w danym module do kontrolera i/lub akcji.
Userzy moga dziedziczyc po sobie uprawnienia. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Można wydzielić w ACL Zenda uprawnienia per moduł. W manualu dalsze info.
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 234 Pomógł: 1 Dołączył: 29.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
W bazie mam id usera oraz id produktu (stanowią parę). User może widzieć jeden lub więcej produktów. I chodzi mi o to w jaki sposób wyświetlić na liście rozwijalnej listę produktów dla danego użytkownika. Wydaje mi się, że KrzysiekWildfire jest najbliżej tego o co mi chodzi. Dla różnych modułów są różne połączenia usera z produktem, są niezależne. Ale oczywiście lista userów jest ta sama dla całej aplikacji.
Oraz jeśli mam dwa moduły docelowe to jak zorganizować logowanie (bez dostępu dla gościa), robić moduł default w którym byłby kontroler np. konto i w nim logowanie ? Robić jakiś plugin do tego acl'a czy jakiś kontroler po którym dziedziczyłyby inne kontrolery z modułów? Na razie chodzę po tym zendzie trochę po omacku :], tak więc z góry dzięki za info. Ten post edytował Thuunder 30.08.2011, 10:36:08 -------------------- najprostsze rzeczy są najmniej oczywiste
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Daaaawno nie pisałem w ZF, ale z tego, co pamiętam, to w swoich projektach używałem napisanego własnoręcznie pluginu, który za każdym razem sprawdzał czy określona rola posiada dostęp do żądanej akcji (zasobu) według reguł zdefiniowanych w ACL. Odnośnie pytania o przefiltrowanie listy produktów należących do konkretnego usera, to myślę, że nie ma większego sensu zaprzęgać w tym obszarze ACLa, wystarczy wyciągnąć odpowiednio dane z bazy po id użytkownika.
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 11 Dołączył: 27.10.2010 Skąd: Kutno/Poznań Ostrzeżenie: (0%) ![]() ![]() |
To będzie tak:
To przykładowy plik ini w którym trzymam prosty układ przywilejów: acl.resources[] = "admin" acl.resources[] = "developer" acl.resources[] = "config" acl.resources[] = "premium" acl.resources[] = "nonpremium" acl.resources[] = "guest" acl.roles[] = "admin" acl.roles[] = "developer" acl.roles[] = "moderator" acl.roles[] = "premium" acl.roles[] = "nonpremium" acl.roles[] = "guest" acl.privilages.admin[] = "admin" acl.privilages.admin[] = "config" acl.privilages.admin[] = "guest" acl.privilages.admin[] = "premium" acl.privilages.admin[] = "nonpremium" acl.privilages.moderator[] = "admin" acl.privilages.moderator[] = "guest" acl.privilages.developer[] = "admin" acl.privilages.developer[] = "developer" acl.privilages.developer[] = "config" acl.privilages.developer[] = "premium" acl.privilages.developer[] = "nonpremium" acl.privilages.developer[] = "guest" acl.privilages.premium[] = "premium" acl.privilages.premium[] = "nonpremium" acl.privilages.premium[] = "guest" acl.privilages.nonpremium[] = "nonpremium" acl.privilages.nonpremium[] = "guest" acl.privilages.guest[] = "guest" Tu muszę zaznaczyć (osoby które korzystają codziennie to widzą), że nie wykorzystałem dziedziczenia, aby ładnie to zobrazować. Pierwsza część ("Resources") - zawiera informacje jakie grupy dostępu mamy. Druga część ("roles") zawiera informacje, jakie mamy grupy użytkowników. Tutaj jako resources mógłbym użyć grupy produktów. Pozostałe bloki przydzielają możliwość przeglądania danej grupy dostępów przez daną grupę użytkowników. Oczywiście samo wsadzenie tego do konfiguracji nic nie da - trzeba stworzyć plugin który pobierze tą konfiguruje i wsadzi wszystko w klasę Zend_Acl. To tego trzymam nawigację w Zend_Navigation (MVC) gdzie trzymam informację kto ma dostęp do danej strony. Plugin wygląda tak:
Jeszcze kilka rzeczy wymaga naprawienia, więc jak ktoś coś poprawi w klasie, to niech da znać ![]() Ten post edytował KrzysiekWildfire 31.08.2011, 13:49:36 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 09:54 |