2011-11-18 39 views
17

Tôi có một dự án với 2 khu vực/Quản trị viên và/Người dùng.Định tuyến dựa trên vai trò MVC

tuyến đường mặc định của Admin là /Admin/Home/Index và tuyến đường mặc định của người dùng là /User/Home/Index.

Có thể thực hiện định tuyến để làm cho URL trang chủ của họ để trông giống như /Thông tin/Index nhưng để hiển thị nội dung từ /Admin/Home/Index cho quản trị viên và /User/Home/Index cho người dùng ?

UPD

Cuối cùng tìm hiểu làm thế nào để làm điều đó

context.MapRoute(
    "Admin", 
    "Profile/{action}", 
    new { area = AreaName, controller = "Home", action = "Index" }, 
    new { RoleConstraint = new Core.RoleConstraint() }, 
    new[] { "MvcApplication1.Areas.Admin.Controllers" } 
); 
... 
context.MapRoute(
    "User", 
    "Profile/{action}", 
    new { area = AreaName, controller = "Home", action = "Index" }, 
    new { RoleConstraint = new Core.RoleConstraint() }, 
    new[] { "MvcApplication1.Areas.User.Controllers" } 
); 

public class RoleConstraint : IRouteConstraint 
{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     string roleName = db.GetRoleByUserName(httpContext.User.Identity.Name); 
     string areaName = route.Defaults["area"].ToString(); 
     return areaName == roleName; 
    } 
} 

Nó hoạt động, nhưng như đối với tôi nó không phải là cách MVC. Có ai biết làm thế nào để làm điều đó đúng không?

Trả lời

4

Có. Ví dụ bạn đã cho thấy rất gần với nhiều mẫu được Microsoft cung cấp để sử dụng các ràng buộc tuyến đường. Công cụ định tuyến hoạt động như một proxy trước (hoặc bộ định tuyến nếu bạn muốn) trước khi yêu cầu được chuyển vào một điều khiển. Các mục như IRouteConstraint được định nghĩa để bạn có thể thực hiện những gì bạn mô tả.

3

Tôi thích giải pháp đó vì nó được lưu ý, nhưng một điều cần ghi nhớ là bản thân định tuyến không nên được sử dụng làm hình thức bảo mật duy nhất. Chỉ cần nhớ rằng bạn nên bảo vệ Bộ điều khiển và Hành động của mình với thuộc tính [Ủy quyền] hoặc bạn đang hạn chế quyền truy cập.

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