2011-11-18 5 views
17

Admin/User라는 두 영역으로 구성된 프로젝트가 있습니다.MVC 역할 기반 라우팅

관리의 기본 경로는 /관리/홈/색인과 사용자의 기본 경로는 /사용자/홈/색인입니다.

는 자신의 홈 URL이 /프로필/색인처럼 보이게하지만 콘텐츠를 표시 할 수 있도록 라우팅을 구현하는 것이 가능 /관리/홈 관리자를위한/인덱스와 사용자 /사용자/홈/색인 ?

UPD

마지막으로 수행하는 방법을 찾으

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; 
    } 
} 

그것은 작동하지만, 나에게로는 MVC 방식이 아니다. 아무도 그것을 올바르게하는 방법을 압니까?

답변

4

예. 표시 한 예는 Microsoft가 Route Constraints를 사용하여 제공 한 많은 샘플과 매우 비슷합니다. 라우팅 엔진은 요청이 컨트롤로 전달되기 전에 사전 프록시 (또는 라우터) 역할을합니다. IRouteConstraint와 같은 항목은 정의한대로 할 수 있도록 정의되어 있습니다.

3

내가 염두에두고 그가 언급 한 것 같은 솔루션,하지만 한 가지 마음에 자체 라우팅하는 것은 보안의 유일한 형태로 사용해서는 안된다는 것입니다. [Authorize] 속성을 사용하여 컨트롤러 및 액션을 보호해야하지만 액세스를 제한해야한다는 점을 명심하십시오.