2013-03-14 11 views
9

Myślę o użyciu kontrolera podstawowego dla całego projektu MVC 4, nad którym pracuję. Znalazłem w Internecie sprzeczne poglądy na ten temat i nie jestem pewien, czy jest to sprzeczne z najlepszymi praktykami lub czy jest to kwestia osobistych preferencji.przy użyciu kontrolera podstawowego dla całego projektu asp.net MVC 4

Oto post stackoverflow, który mówi dont do it

Here jest post, który wykazał, jak to zrobić jak nie występują szkodliwe skutki tego. Here i here, a także wyjaśniają sposób ich użycia tam, gdzie nikt nie wskazuje, że jest to zła praktyka lub może prowadzić do jakichkolwiek problemów.

Więc jaki jest naprawdę pogląd na użycie kilku podstawowych kontrolerów w projekcie MVC 4? Dobry? Zły?

Edit

Chciałbym również podkreślić, że moja Bezpośrednim celem korzystania podstawowy kontroler jest tak, że mogę mieć Autoryzacja odbywa się w jednym sterowniku i tak, że wszystkie kontrolery nie muszą mieć atrybut Authorize. Stworzę oddzielne kontrolery podstawowe dla każdej roli. Ponieważ role nigdy się nie zmienią, nigdy nie będę musiał tworzyć kolejnego kontrolera bazowego dla innej roli. Co sądzisz o tym sposobie projektowania sterowników?

Dzięki za poświęcony czas.

Odpowiedz

3

Użyłem podstawowy kontroler wcześniej, kiedy do czynienia z rzeczami jak nadpisanie metody User główny (patrz tutaj dla starego kwestii kopalni opisujący pomysł: Is this Custom Principal in Base Controller ASP.NET MVC 3 terribly inefficient?).

Szczerze mówiąc nie mogłem wymyślić lepszego sposobu na zrobienie tego, więc uważam, że w tego rodzaju scenariuszu używanie kontrolera bazowego może być dobrą rzeczą.

Prawdopodobnie nie miałbym różnych kontrolerów bazowych dla różnych ról autoryzacji, ponieważ jest dość prosty (i mniej kodu) tylko po to, aby udekorować kontroler za pomocą [Authorize(Roles="whatever")] i łatwiej będzie dokładnie zobaczyć, co się dzieje.

Warto zastanowić się nad niestandardowym AuthorizeAttribute.

+0

Zobacz to. Próbowałem uniknąć ozdabiania każdego kontrolera atrybutem autoryzacji. Chcę tylko młodszych programistów wiedzieć, że jeśli pracują na stronie, do której dostęp ma tylko administrator, powinni dziedziczyć z AdminController. Wyliczyłbym każdą z tych ról, gdy Admin jest numerem 1 na liście. Tak więc w moim niestandardowym atrybucie autoryzacji mogę mieć tylko kontrolę większą lub mniejszą od wartości wyliczeniowej dostarczonej przez kontroler podstawowy – user20358

+0

Problem może powstać, jeśli masz złożone wymagania co do ról, które mogą robić, jakie rzeczy. Mówię o tym, czy wymagania zmienią się później. Dekorowanie kontrolerów za pomocą niestandardowego 'AuthorizateAttribute' jest prawdopodobnie lepsze (patrz link w edytowanej odpowiedzi). –

+0

Dzięki. sprawdzi to. – user20358

4

IMHO to, co oznacza post, o którym mówisz, jest absolutnie prawdziwe, ale to nie jest powód, aby nie używać kontrolera podstawowego. W rzeczywistości używam kontrolera podstawowego w niektórych aplikacjach ASP.NET MVC z powodu towaru.

To już nie jest wskazane:

Mając podstawowy kontroler do zastosowania [Autoryzuj] atrybut raz jest powszechną praktyką, a ja nie widzę nic złego na niego.

Od MVC3 można zarejestrować globalnych filtrów działania tak:

GlobalFilters.Filters.Add(new MyAuthorizeAttribute());

+0

Dzięki za odpowiedź. Czy uważasz, że posiadanie wielu ról jest problemem? Następnie dla każdej roli potrzebowałbym osobnego kontrolera. Jeden kontroler podstawowy dla administratora. Tak więc tylko strony administracyjne dziedziczą tylko z tego konkretnego kontrolera. Podobnie dla innych ról. – user20358

+0

Jeśli wszystkie akcje kontrolera są autoryzowane dla tych samych ról, nie widzę problemu z użyciem oddzielnego kontrolera podstawowego dla każdej roli. Ale jeśli posiadasz kontrolerów z czynnościami autoryzowanymi do jednego zestawu ról i innych działań autoryzowanych do innego zestawu ról, może powinieneś spróbować alternatywnego podejścia. – eiximenis

Powiązane problemy