Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework]ACL i utrwalania zasobów w bazie mysql
Lysiur
post
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 (IMG:style_emoticons/default/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
 
Start new topic
Odpowiedzi
irmidjusz
post
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 (IMG:style_emoticons/default/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 ? (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 17.10.2025 - 14:45