Struktura aplikacji

Cześć!
Mam 2 pomysły jak się zabrać za pisanie aplikacji i nie wiem który jest poprawny.

Aplikacja dzieli się na 2 części, pierwsza widoczna dla wszystkich i druga widoczna tylko dla zalogowanych (administrator).

Załóżmy, że mam produkty. Administrator może (w panelu administratora) mieć wyświetloną ich listę, może dodawać, edytować i usuwać (index, create, edit, update, delete). Oczywiście to wszystko po autoryzacji użytkownika.

Wszyscy w głównej części mogą przeglądać te produkty i mieć wyświetlone informacje o nich (index, show). Tylko lista tych produktów oczywiście wygląda wizualnie inaczej niż w panelu administratora.

Czyli mamy jakby 2 moduły, ale na produktach operujemy zarówno w jednym jak i drugim.

Pierwsze podejście jest takie, żeby stworzyć w domyślnej przestrzeni nazw kontroler Products i w nim wszystkie metody. Odpowiednie zabezpieczyć poprzez before_filter :auth_user. Jako że mamy 2x index, czyli 2 różne sposoby wyświetlania wszystkich przedmiotów to dodanie osobnej metody do wyświetlenia w panelu admin (np “manage”), tylko pewnie kod się powieli z index… Czyli ogólnie wszystko trzymamy w głównym “module”.

Drugie podejście to utworzyć przestrzeń nazw “admin”, tam kontroler Products zabezpieczony cały autoryzacją i w nim metody dla admina (index, create, edit, update, delete). W głównej przestrzeni znowu kontroler Products tylko w nim metody index i show dostępne dla wszystkich. Metody pewnie będą powielać kod z kontrolera admina, ale chodzi o to żeby był inny widok. No i kontroler Products w głównej przestrzeni nazw będzie korzystał z modelu Admin::Product żeby go nie powielać… Czy ogólnie mamy rozbite na 2 części, ale ten sam kontroler w obu.

Wiem, że trochę zagmatwanie napisane, jeśli coś będzie niejasne postaram się sprecyzować. Proszę o pomoc jak to powinno wyglądać.

Pozdrawiam,
lukaszl

Proponuję dla zwykłego użytkownika zrobić akcje index i show, panel administratora załatwić dzięki ActiveAdmin ( http://www.activeadmin.info/ ). Zaoszczędzisz sporo czasu.

Rozbij tylko kontroler na ProductsController i Admin::ProductsController. Model nie powinien nic wiedzieć o kontroli dostępu, to nie jego broszka.