Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework]ACL i utrwalania zasobów w bazie mysql
Lysiur
post 18.12.2012, 16:07:10
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 11
Dołączył: 25.07.2012

Ostrzeżenie: (0%)
-----


Witam, aktualnie tworzę pewien system CRM (oparty o ZF1), muszę zrobić dość elastyczne rozwiąznia, które będą w miarę przenośne.

system będzie wykorzystywał ACL'a opartego o bazie.

table acl_roles (id_role,code,name),
table acl_resources (id_acl_resurce, module,controller,action)
table acl_privileges (id_role,id_acl_resources, type)

Wypełnianie acl_resources jest automatyczne, tz. lecę po systemie plików i generuje np.: tablicę posortowaną wg. nazwy modułu,controllera, akcji

  1. array('module'=>'test','controller'=>'testowy','action'=>'testowa'),
  2. array('module'=>'test2','controller'=>'testowy2','action'=>'testowa2'),
  3. etc...
  4. )


I teraz chciałbym przejść do sedna sprawy. W jaki sposób rozwiązaliście byście kwestię utrwalania takiego zbioru w acl_resources?

Oczywiście można polecieć w pętli i dodawać kolejno do bazy, ale problem zaczyna się, gdy np.: jakiś controller czy akcja ulegnie zmienia, (np.: jedna zostanie usunięta, inna będzie miała zmienioną nazwę, inna zostanie dodana). Macie jakieś doświadczania lub sposoby by w jakiś elegancji sposób odświerzyć listę zasobów w tabeli acl_resources questionmark.gif

Dopiero będę nad tym myślał, być może jest jakaś fajna funckja do porownywania dwóch zbiorów?
Go to the top of the page
+Quote Post
irmidjusz
post 18.12.2012, 23:45:47
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


Po pierwsze, sensowny zapis ACL dla Zend_Acl w bazie możę być skomplikowany. Musisz wziąć pod uwagę koszt budowania ACLa i ewentualnego cache'owania go i uaktualniania, oraz zarządzania tym wszystkim w panelu administratora (o ile przewidujesz coś takiego). Przygotuj się na dużo pracy tongue.gif
Po drugie, przemyśl dobrze, czy w ogóle robienie uprawnień dla każdej akcji w każdym kontrolerze jest aby na pewno tym, czego potrzebujesz. Dla mnie osobiście to bez sensu, nigdy bym tak nie zrobił (to ma sens jedynie w przypadku bardzo prostych stronek). Wyodrębnij sobie koncepcyjnie zasoby, role i akcje na wyższym poziomie organizacji, niż pliki/kontrolery/akcje. Często to jednego uprawnienia należy wiele akcji, modeli itp. Przykładowo coś w stylu: Manager może przeglądać uploadowane zdjęcia Usera i w razie potrzeby wyłączać je z wyświetlania (takie moderowanie) - to co, chcesz w takim przypadku pytać o to, czy Manager może wykonać akcje: /manager/moderate/showUserProfile, /photo/moderate/disable, /user/abuse/warning ? wink.gif (są trzy bo jedna od wejścia na stronę, a dwie od requestów ajaxowych). Jak się w tym połapiesz? Czy nie lepiej, jeśli będziesz sprawdzał tylko
  1. $acl->isAllowed('Manager', 'UserPhoto', 'moderate');
wszędzie tam, gdzie trzeba?


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
Lysiur
post 19.12.2012, 14:13:24
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 11
Dołączył: 25.07.2012

Ostrzeżenie: (0%)
-----


Dziekuje za odpowiewdź. W ostatnim projekcie, zrelizowałem takie rozwiązanie o którym pisałem, aczkoliwek nie korzystałem wtedy z Zend_Acl. System zakładał, iż jeden moduł był dostępny bez identyfikacji, reszta modułów wymagała autoryzacji. Dla chronionych modułów, każda akcja była sprawdzana, czy dany użytkownik ma do tego dostęp. Była też część administracyjna, gdzie każdy modul/controller/action była przypisana do jednego lub kilku ról. Zdawałem sobie sprawę, że aktualizacja uprawnień będzie upierdliwa, (bo każdą nową akcję trzeba dodać do zasobów i zaznaczyć odpowiednie role), nie mniej jednak rozwiązanie było elastyczne i dało radę. Choć przeglądanie kilkudziesięciu akcji było nieco karkołomne.

Jeśli dobrze zrozumiałem, to proponujesz wyłonić grupy, np: według założeń funckjonalnych, i w nich zrgrupować odpowiednie controllery/akcje. A odpowiednim rolom nadać dostęp do odpowiednich grup?
Go to the top of the page
+Quote Post
gothye
post 19.12.2012, 14:56:08
Post #4





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

Ostrzeżenie: (0%)
-----


http://static.zend.com/topics/dynamicacl-s...48-phpapp01.pdf
http://www.phpclasses.org/package/4100-PHP...a-database.html

Ten post edytował gothye 19.12.2012, 14:58:44


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
irmidjusz
post 20.12.2012, 00:04:00
Post #5





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


Cytat(Lysiur @ 19.12.2012, 14:13:24 ) *
Jeśli dobrze zrozumiałem, to proponujesz wyłonić grupy, np: według założeń funckjonalnych, i w nich zrgrupować odpowiednie controllery/akcje. A odpowiednim rolom nadać dostęp do odpowiednich grup?


tak, coś w tym stylu.


--------------------
there is much to be learned
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.05.2024 - 13:07