menu odpowiednie do roli - grupy użytkowników

Po wypróbowaniu kilku rozszerzeń zostałem przy yii-user oraz rights sprawiały najmniej problemów i najbardziej mi odpowiadają. Próbuję to teraz połączyć z Creating a database-driven hierarchical Structure combined with CMenu and superfish i tutaj mam problem ponieważ z Yii dopiero zaczynam i nie wszystko jest dla mnie jasne. Chciałbym z bazy pobierać pozycje do menu ale tylko odpowiednie do danej roli (grupy użytkowników).Yii-user nie grupuje użytkowników więc chyba najbardziej odpowiednie byłoby przypisanie do roli tu jednak rights przechowuje wszystkie role i inne wpisy razem w tabeli AuthItem więc chyba relacja z tabelą z wpisami z menu typu wiele do wielu nie jest możliwa? Chyba źle się do tego zabieram dlatego bardzo proszę o wskazówki jak to zrobić?

Wydaje mi się, że możesz zrobić tam relacje wiele do wielu. Musisz tylko zapewnić spójność danych. Albo w php, albo jako triggery w bazie. W przypadku php, najlepiej upewnić się, że do tabeli asocjacyjnej trafiają tylko id elementów tabeli Hierarchy (z menu) dla których parent wynosi 1, oraz id tabeli authItem (z RBAC) dla których type jest równe CAuthItem::TYPE_ROLE (int 2).

Możesz też zapewnić spójność danych w triggerze. Sprawdzasz, wtedy przed insertem i przed updatem jaki jest parent i jaki jest type i w razie potrzeby przeszukujesz tabele Hierarchy w poszukiwania elementu nadrzędnego, lub tabele AuthItemChild w poszukiwaniu najbliżej nadrzędnej roli. Jest to rozwiązanie lepsze, jeżeli dane będą edytowane z rożnych interfejsów (np, aplikacja web + aplikacja desktop) ale też wymagająca dużo więcej pracy.

Proponuje rozwiązanie w php. Będziesz musiał zmodyfikować relacje w modelu dla Hierarchy tak, żeby filtrował po tabeli asocjacyjnej, oraz rozbudować rights o dodatkowy formularz, gdzie będziesz sobie przypisywał role do elementów menu.

też tak wcześniej kombinowałem i gdyby role były jako oddzielna tabela to byłoby idealne w przypadku gdy wszystko jest w jednej tabeli (kolumnie) trochę się sprawa komplikuje ale wystarczy powiązać tylko te z id=2 (role) i powinno być OK i tutaj chyba nic prostszego nie da się wykombinować

dzięki za info :)