Cytat(cojack)
Ale gościu nakombinował, strasznie... nie podoba mi się ten sposób dostępu do modułów. Wystarczy że sobie zmienisz nazwy controlerow a router jest na tyle ubogi że nie możesz w nim definiować dla controlera innej nazwy i dupa, leżysz i kwiczysz, mało flexible.
Przy projektowaniu czegokolwiek polecam rezygnację z podejścia "system jest do bani, bo przycisk w prawym górnym rogu jest zielony, a nie czerwony". Jeśli chcesz stworzyć system ACL, który w pewnym momencie nie rozjedzie Ci się z powodu błędów logicznych w rozumowaniu, musisz umieć pomijać takie szczegóły, jak sposób nazwania zasobów. To jest tylko kwestia implementacyjna - chyba nie sądzisz, że będę przez 90% artykułu wyprowadzał cały framework jedynie po to, by móc szybciej nazwę kontrolera sobie zmienić, a meritum będzie w ostatnich 10% tekstu. To, że implementacja czegoś nie ma, nie znaczy, że cała idea jest do kitu lub mało elastyczna. Zwróć uwagę, że to Ty napisałeś, że elementy w
acl_resource to moduły - ja nie robiłem nigdzie tak daleko idących założeń. Więcej - nie zakładałem też, że
acl_role musi być grupą użytkowników - jeśli wstawisz w to miejsce zwykłego użytkownika, siła wyrazu mechanizmu rozpoznawania uprawnień nie zmieni się. Możesz tam dać i jedno, i drugie, możesz wreszcie wymyślić jakiś zupełnie odjechany system i nie wpłynie to na sam algorytm.
Przykładowy problem, z którym Twój ACL sobie nie poradzi, a mój tak. Najpierw szkic sytuacji:
- Mamy artykuły podzielone na kategorie.
- Do artykułów można dodawać komentarze.
Problemy:
- Pewna kategoria jest widoczna tylko dla konkretnej roli.
- Pewna rola może moderować komentarze w wybranej kategorii artykułów.
- Pewna rola może moderować komentarze we wszystkich kategoriach artykułów.
- Pewien artykuł może być modyfikowany przez wybraną rolę.
Ty sztywno związałeś akcje z modułami, nie możesz więc przydzielać uprawnień do pojedynczych elementów zbioru. U mnie jest to jedynie kwestia wymyślenia odpowiedniej reprezentacji drzewka, np.
/frontend/articles/(id kategorii)/article/(id artykułu)/comments/edit. Pełne uprawnienia do edycji komentarzy to 1 dla ścieżki
/frontend/articles/*/article/*/comments/edit, pełne uprawnienia do edycji komentarzy w kategorii to 1 dla ścieżki
/frontend/articles/17/article/*/comments/edit. Co więcej, nawet jeśli przydzieliliśmy komuś prawo do edycji zasobu, a nagle musimy zablokować mu dostęp do całego działu, wszystko sprowadza się do zmiany stanu na 0 dla ścieżki
/frontend/articles... co sprowadza nas do tego, że artykuł prezentuje niemal w 100% identyczne rozwiązanie, jak to, które przedstawił phpion i które tak Ci się podobało.
Podsumowując, najpierw przemyśl sobie cały problem w oderwaniu od wszystkiego, a później myśl, jak go zaimplementować. Nie na odwrót.