Witam. To mój pierwszy post na forum.
Od kilku tygodni przyglądam się Yii i bardzo mi się spodobał.
Przeszedłem przez lekturę ‘Przewodnika’ i ‘zaimplementowałem’ bloga
W ramach dalszej nauki chciałbym dać możliwość ‘zakładania’ bloga wielu
użytkownikom w ramach tej samej aplikacji, wiec np. każdy po pomyślnym
uwierzytelnieniu widziałby np. jedynie swoje posty. Jednak napotkałem na problem. Jak łatwo zdeterminować jakie
dane mogę danemu, uwierzytelnionemu użytkownikowi pokazać?
Sam gii generuje nam wiele plikow i faktycznie aplikacja ‘dziala’ niemal od
razu. Gdy wpisze url /post/1 otrzymam dane posta 1, jak 2 to dane posta 2 itp.
Gdy wpisze samo /post dostane liste postow - ale wszystkich!
W kontrolerze pobierającym dane moge ograniczyc dane do np. user_id===Yii::app()->user->id,
ale skolei tych akcji kontrolera też jest niemało, więc
zmiana tego w każdym miejscu jest niewygodna. Inna rzecz, że nawet jak
powyrzucam z widoku linki do tych akcji, ktoś znający budowę standardowej
aplikacji w yii, może zacząć ‘preparować’ linki - i co wtedy?
Więc jak uniemożliwić podejrzenie posta o ID=2 osobie, która nie jest jego
autorem?
Jak to ugryźć?
Najchętniej bym filtrował dane już na poziomie samego modelu tak żeby
odwołując się do niego z akcji kontrolera miał pewność, że ograniczy mi
serwowane dane do tych przypisanych danemu użytkownikowi.
Czytałem już trochę o ‘scopes’, ‘filtrach’ i ‘behaviors’, ale nie wiem jeszcze
jak się do nich zabrać i które rozwiązanie jest najlepsze.
A jakie Wy stosujecie?
Kolejny bardziej złożony przypadek (bardziej mnie interesuje) to np.
osoba przypisana do danego wydziału (department) np. na uczelni. Wydział oferuje nauke na
wielu kierunkach, zatrudnia wielu pracowników i zrzesza wielu studentów itd.
Załóżmy, że do ‘panelu’ loguje się taki pracownik. Na podstawie jego ID chcemy
odczytać do jakiego wydziału jest przypisany (department_id), chcemy mu wylistować pracowników
w tym wydziale itd.
Jak najlepiej zrealizować coś takiego? Po uwierzytelnieniu znamy ID
użytkownika. Po relacji (deparment_id) możemy odczytać do jakiego wydziału
jest przypisany itd. Jak realizując pobieranie danych zabezpieczyć się przed
‘preparowaniem’ linków - tak żeby mieć pewność, że zalogowany zobaczy jedynie
te dane, które powinien?
Trochę się rozpisałem… ale chciałem mieć pewność, że dobrze opiszę istote
problemu. Za wszelkie sugestie, rozwiązania, liki z góry dziękuję.