2013-03-14 32 views
9

Tôi đang nghĩ đến việc sử dụng bộ điều khiển cơ sở cho toàn bộ dự án MVC 4 mà tôi đang làm việc. Tôi đã tìm thấy các quan điểm xung đột trực tuyến về nó và không thực sự chắc chắn nếu nó là chống lại thực hành tốt nhất hoặc nếu nó chỉ là vấn đề sở thích cá nhân.sử dụng bộ điều khiển cơ sở cho toàn bộ dự án asp.net MVC 4

Đây là một bài stackoverflow nói rằng dont do it

Here là một bài mà đã cho thấy làm thế nào để làm điều đó như không có tác hại của nó. Herehere cũng như họ giải thích cách sử dụng của nó, nơi không có ai thực sự chỉ ra rằng nó là thực hành xấu hoặc có thể dẫn đến bất kỳ vấn đề về phía trước.

Vậy điều gì thực sự là chế độ xem sử dụng một vài bộ điều khiển cơ sở trong dự án MVC 4? Tốt chứ? Xấu?

Sửa

Tôi cũng muốn chỉ ra rằng mục tiêu trước mắt của tôi cho việc sử dụng một bộ điều khiển cơ bản là để tôi có thể có ủy quyền thực hiện trong một bộ điều khiển và để tất cả các bộ điều khiển không cần phải có thuộc tính Authorize. Tôi sẽ tạo các bộ điều khiển cơ sở riêng biệt cho từng vai trò. Vì các vai trò sẽ không bao giờ thay đổi nên tôi sẽ không bao giờ cần phải tạo một bộ điều khiển cơ sở cho một vai trò khác. Bạn nghĩ gì về cách thiết kế bộ điều khiển này?

Cảm ơn thời gian của bạn.

Trả lời

3

Tôi đã sử dụng một bộ điều khiển cơ sở trước khi giao dịch với những thứ như trọng các User chính (xem ở đây cho một câu hỏi cũ của tôi mô tả ý tưởng: Is this Custom Principal in Base Controller ASP.NET MVC 3 terribly inefficient?).

Tôi thành thật không thể nghĩ ra một cách tốt hơn để làm điều này, vì vậy tôi cảm thấy rằng trong loại kịch bản này bằng cách sử dụng bộ điều khiển cơ sở có thể là một điều tốt. Tôi có thể sẽ không có bộ điều khiển cơ sở khác nhau cho các vai trò ủy quyền khác nhau vì nó khá đơn giản (và ít mã hơn) để trang trí bộ điều khiển với [Authorize(Roles="whatever")] và sẽ dễ dàng hơn để xem chính xác những gì đang xảy ra.

Có thể đáng xem xét tùy chỉnh AuthorizeAttribute.

+0

thấy điều đó. Tôi đã cố gắng tránh trang trí mỗi bộ điều khiển với thuộc tính ủy quyền. Tôi chỉ muốn các nhà phát triển cơ sở để biết rằng nếu họ đang làm việc trên trang mà chỉ có một Admin có thể truy cập thì họ nên kế thừa từ AdminController. Tôi sẽ enum mỗi vai trò ra với Admin là số 1 trong danh sách .. vì vậy trong thuộc tính ủy quyền tùy chỉnh của tôi tôi chỉ có thể có một kiểm tra lớn hơn hoặc ít hơn giá trị enum được cung cấp bởi bộ điều khiển cơ sở – user20358

+0

Vấn đề có thể phát sinh nếu bạn có những yêu cầu phức tạp về những vai trò nào được phép làm những việc gì. Tôi đang nói về các yêu cầu thay đổi sau này. Trang trí các bộ điều khiển với một số loại tùy chỉnh 'AuthorizateAttribute' có lẽ tốt hơn (xem liên kết trong câu trả lời đã chỉnh sửa). –

+0

Cảm ơn. sẽ kiểm tra nó. – user20358

4

IMHO nội dung mà bạn tham chiếu nói là hoàn toàn đúng, nhưng đó không phải là lý do để không sử dụng bộ điều khiển cơ sở. Trong thực tế, tôi sử dụng một bộ điều khiển cơ sở trong một số ứng dụng ASP.NET MVC của tôi vì hàng hóa.

này không còn nên:

Có một bộ điều khiển cơ sở để áp dụng các [Duyệt] thuộc tính một lần là một thực tế phổ biến, và tôi không thấy bất cứ điều gì sai về nó.

Kể từ MVC3 bạn có thể đăng ký lọc hành động toàn cầu như thế này:

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

+0

Cảm ơn bạn đã trả lời. Bạn có nghĩ rằng có nhiều vai trò là một vấn đề? Sau đó, cho mỗi vai trò, tôi sẽ cần một bộ điều khiển riêng biệt. Một bộ điều khiển cơ sở cho Quản trị viên. Vì vậy, chỉ có các trang quản trị được kế thừa từ bộ điều khiển cụ thể đó. Tương tự cho các vai trò khác .. – user20358

+0

Nếu tất cả các hành động của bộ điều khiển được ủy quyền cho cùng một vai trò, tôi không thấy vấn đề bằng cách sử dụng bộ điều khiển cơ sở riêng biệt cho từng vai trò. Nhưng nếu bạn có bộ điều khiển với các hành động được ủy quyền cho một bộ vai trò và các hành động khác được ủy quyền cho một nhóm vai trò khác có thể bạn nên thử phương pháp thay thế. – eiximenis

Các vấn đề liên quan