[ZendFramework]ACL i utrwalania zasobów w bazie mysql |
[ZendFramework]ACL i utrwalania zasobów w bazie mysql |
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
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 Dopiero będę nad tym myślał, być może jest jakaś fajna funckja do porownywania dwóch zbiorów? |
|
|
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
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 ? (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? -------------------- there is much to be learned
|
|
|
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? |
|
|
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
|
|
|
20.12.2012, 00:04:00
Post
#5
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) |
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
|
|
|
Wersja Lo-Fi | Aktualny czas: 22.05.2024 - 13:07 |