![]() |
![]() |
![]()
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
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? |
|
|
![]() |
![]()
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 wszędzie tam, gdzie trzeba? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 14:45 |