2008-12-08 28 views
5

Vì vậy, tôi đã làm việc trên một ứng dụng web nhỏ (trang web) cho một nhóm bạn của tôi và đã nhận ra rằng mọi thứ cần phải thay đổi. Ứng dụng này có hai khuôn mặt để nóLàm thế nào bạn sẽ kiến ​​trúc sư khách truy cập và chức năng quản trị trong một ứng dụng web ASP.Net MVC duy nhất?

  1. một mặt phải đối mặt với công chúng phục vụ dữ liệu động cho du khách và các quản trị viên thuốc, và
  2. một bên quản trị mà quản trị viên có thể cập nhật hoặc tạo ra các dữ liệu động để được phục vụ.

Ứng dụng này bắt đầu dưới dạng một dự án biểu mẫu web đơn lẻ được tách riêng bởi các trang riêng biệt và bảo mật thư mục web.config. Sau đó, nó phát triển thành các dự án riêng biệt (bên quản trị MVC và giao diện người dùng webforms). Sau đó tôi phải đưa nó đến nơi nó là ngày hôm nay, một ứng dụng web đơn lẻ với sự kết hợp của MVC (admin) và biểu mẫu web (công khai), do các vấn đề triển khai.

Bây giờ tôi đang xem xét việc di chuyển nó sang một dự án MVC duy nhất. Tôi muốn giữ cho chức năng quản trị của tôi tuyệt vọng từ phía đối diện công khai của tôi bằng URL như/Admin và không chắc chắn làm thế nào để làm điều đó. Tôi đã đọc rất nhiều chủ đề về nhóm các bộ điều khiển thành các mô-đun nhưng không chắc chắn đó là điều đúng.

  • Tôi có nên tạo chức năng quản trị nội tuyến với phần còn lại của ứng dụng công khai và xác định xem người dùng có đăng nhập hay không?
  • Hoặc tôi có nên tạo Bộ điều khiển quản trị riêng biệt với bộ điều khiển công cộng (EventAdminController vs CalendarController) không?
  • Người khác đã làm gì?

Đề xuất chào mừng, cảm ơn stackoverflow.


Có Tôi đang sử dụng khung công tác ASP.Net MVC từ Microsoft. Darryl, bạn đang nói để đặt quan điểm của tôi trong một thư mục Admin và bảo vệ nó bằng cách sử dụng một web.config (để kiểm tra an ninh và vai trò) hoặc để đặt bộ điều khiển của tôi trong một thư mục Admin?

Giả định của tôi là bạn đang nói để đặt bộ điều khiển trong thư mục Quản trị, nói dưới bộ điều khiển. Điều này vẫn có nghĩa là HomeController in/Controllers khác với HomeAdminController trong/Controllers/Admin. Trong trường hợp này, bạn có thể cấu hình các tuyến cụ thể cho mỗi nhưng tôi không thấy cách đặt một bộ điều khiển trong một thư mục khác sẽ bảo vệ chúng (trừ khi sử dụng thuộc tính Authorize trên các hành động).

Để đặt chế độ xem trong một thư mục khác, tôi có thể thấy cách thức đó có thể hoạt động theo lý thuyết. Nhưng không phải bộ điều khiển (về mặt lý thuyết không có bất kỳ thuộc tính ủy quyền nào) vẫn thực thi đến mức mà khung nhìn được trả về? Sau đó tôi sẽ mong đợi một chuyển hướng hoặc một lỗi. Dù bằng cách nào tôi sẽ không muốn thực hiện hành động điều khiển của tôi nếu bạn không thể nhận được để xem, và thay vì sẽ không làm bất kỳ hành động nội bộ trước khi kiểm tra.

Trả lời

1

Trên dự án MVC, tôi đang làm việc trên tất cả các công cụ quản trị trong thư mục quản trị. Để xem thư mục quản trị, bạn phải được xác thực và trong vai trò chính xác. Bộ điều khiển của tôi có xu hướng rất tối thiểu, hầu hết logic đều nằm trong một lớp nghiệp vụ mà các bộ điều khiển sử dụng.

+0

Tôi không chắc cách điều đó sẽ hoạt động với bộ điều khiển. Họ không biết ranh giới. Tôi đã sử dụng phương pháp này trong thế giới web form và hoạt động tốt. Tôi có thể tổ chức bộ điều khiển của tôi tốt hơn nhưng tôi sẽ phải có tên duy nhất trên tất cả các bộ điều khiển int ông dự án. –

+0

Bạn đang sử dụng ASP.NET MVC Framework mà Microsoft cung cấp hoặc một số khung MVC khác cho ASP.NET? Trong bộ điều khiển ASP.NET MVC Framework được gắn chặt chẽ với khung nhìn theo mặc định. do đó, url http://www.example.com/admin/something/1/ sẽ gọi cho AdminControler.Một số (1) –

+0

bạn cũng có thể sử dụng bộ lọc, khu vực, định tuyến có ràng buộc xác thực hoặc vùng chứa IOC với logic xác thực thực hiện loại chức năng này –

2

Chúng tôi có một vấn đề tương tự khi chúng tôi đang tạo một ứng dụng ASP.NET MVC rất lớn và để tách chức năng thành các khu vực chúng tôi đang sử dụng quy trình rất giống với this post by Phil Haack.Bằng cách tạo các khu vực, bạn có thể có tên bộ điều khiển duy nhất cho từng khu vực thay vì cho toàn bộ ứng dụng, bạn có thể tách các mô-đun của bạn dễ dàng hơn và bạn có thể chia sẻ xác thực và chức năng cơ bản chung.

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