2013-06-09 36 views
7

Tôi đã cố gắng tìm ra cách để tạo giải pháp điều hướng dựa trên vai trò động cho một dự án mà tôi đang làm việc.Điều hướng dựa trên vai trò

Điều hướng sẽ chỉ hiển thị các liên kết có liên quan đến vai trò của người dùng, ví dụ: quản trị viên sẽ có liên kết để xem số liệu thống kê ứng dụng, quản lý tài khoản khách hàng, ... trong khi người dùng chuẩn sẽ có liên kết để quản lý tài khoản của họ, giao tiếp với bạn bè, vv ..

Tôi hiện có một chế độ xem một phần được gọi là Điều hướng với một số câu lệnh điều kiện cơ bản để kiểm tra vai trò và kết hợp đánh dấu để hiển thị các liên kết thích hợp. Điều này làm việc, nhưng, tôi biết nó có thể nhanh chóng trở thành không thể quản lý được.

Navigation Partial View:

@if(User.IsInRole("Admin")) { 
    <li><a href="#">Statistics</a></li> 
    <li><a href="#">Accounts</a></li> 
    <li><a href="#">Dashboard</a></li> 
} 
@if(User.IsInRole("User")) { 
    <li><a href="#">Account</a></li> 
    <li><a href="#">Friends</a></li> 
} 
// code omitted 

Có cách nào để có được logic này ra khỏi tầm nhìn và để điều khiển xử lý này?

+1

Sử dụng một phần của bạn có sử dụng phương pháp hành động không? –

+0

Cảm ơn Dave. Không nó không. Đã không thực sự sử dụng Hành động con trước đây. Bạn có muốn mở rộng câu hỏi của mình không? Tôi không chắc chắn vai trò của trẻ sẽ đóng vai trò gì trong kịch bản này. – mezmi

+4

Hành động của trẻ em thật tuyệt vời. Chúng là những hành động truyền lại mô hình cho bạn một phần. bạn sẽ gọi chúng là 'Action ("/Controller/Action/id ")'. Phần id có thể là xử lý của bạn cho nav bạn muốn tạo và mô hình có thể là một danh sách các mục nav. Thậm chí tốt hơn, hành động con của bạn có thể tra cứu vai trò người dùng của bạn mà không có đối số và trả lại thanh điều hướng thích hợp. Tôi đã sử dụng điều này cho điều hướng dựa trên vai trò trước đây. –

Trả lời

14

SOLUTION

Như đã đề cập, tôi đã tạo ra một ChildAction gọi là Menu và quang cảnh một phần cho mỗi vai trò. Bên trong hành động, tôi thực hiện kiểm tra vai trò bằng cách sử dụng một số câu lệnh có điều kiện và hiển thị chế độ xem thích hợp.

Điều này sẽ giữ các câu lệnh có điều kiện trong số các chế độ xem làm cho giải pháp này trở nên sạch hơn.

Tôi chắc chắn có một vài điều có thể được thực hiện để dọn dẹp nó và tôi sẽ tiếp tục cố gắng cải thiện nó.

Đây là giải pháp tôi đã sử dụng.

Trong chế độ xem bố cục nơi tôi muốn trình đơn xuất hiện, tôi đã sử dụng tính năng này.

@Html.Action("Menu", "Navigation") 

Sau đó, tôi đã tạo bộ điều khiển có tên Điều hướng và thêm một hành động được gọi là Menu.

public class NavigationController : Controller 
{ 

    [ChildActionOnly] 
    public ActionResult Menu() 
    { 
     if (Roles.IsUserInRole("Administrator")) 
     { 
      return PartialView("_NavigationAdmin"); 

     } 

     return PartialView("_NavigationPublic"); 
    } 

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