Ostatnio naszła mnie potrzeba na utworzenie listy kontroli dostępu dla użytkowników do modułów i akcji, cel zadania:

  1. Użytkownik w wielu grupach
  2. Grupy użytkowników
  3. Zadania
  4. Grupy zadań
  5. Dostęp grupie użytkowników do zadań
  6. Dostęp grupie użytkowników do grupy zadań
  7. Dostęp pojedynczemu użytkownikowi do zadań
  8. Dostęp pojedynczemu użytkownikowi do grupy zadań
  9. Hierarchia grup (dziedziczenie z rodzica grupy)

No i z pomocą przyszło google, a dokładnie strona: link, kolega przedstawił wzór graficzny w jaki sposób wszystko z sobą połączyć:

RBAC

W tablicy TASK (czyli zadania, będę przechowywał moduły i akcje, w postaci drzewa (tak drzewo, mam już sposób w doctrine na prace z drzewem, opiszę nie długo, albo ltree się zobaczy), po adresie albo routerze, jeżeli będzie przepisany link, będę pobierał moduł i akcję którą w danej chwili wykonuje użytkownik, na samym początku będzie sprawdzanie czy użytkownik ma dostęp do grupy zadań, jeżeli ma, jest szansa na to że będzie miał dostęp do zadania, jeżeli nie, sprawdzimy grupę użytkownika, czy ma dostęp do grupy zadań, biorąc pod uwagę czy ma ojca i jakie on ma uprawnienia do zadań oraz czy pozwala na dziedziczenie tych uprawnień.

Do: Zyx
W ten sposób rozwiązuje nawet problem taki jaki mi przedstawiłeś dotyczący kategorii artykułów dopisując je jako dziecko articles.

Co o Tym sądzicie? Już nie długo przedstawię pełny kod :)