2011-10-21 4 views
0

일부 사용자가 이벤트를 편집해야하는 MVC3 애플리케이션을 개발 중입니다. '관리자'와 '발기인'모두 해당 이벤트를 편집 할 수 있어야합니다. 보기는 동일합니다. .. 내 구조 레이아웃 페이지가 발기인 다른해야하기 때문에 두 영역에서 나는 다른 컨트롤러를 사용하고이컨트롤러/영역간에 편집 페이지를 공유합니다.

/admin/events/edit/1 
/promoter/events/edit/1 

같은 조금 그들은 매우 다른 옵션을 가지고 있기 때문에 나는 나의 관리자와 발기인에 대한 영역을 생성/관리자 영역. Offcourse는 중복으로 이어지고 여기서 더 나은 솔루션을 찾고 있습니다. 내가 '공유'폴더에 넣을 수있는 뷰는 있지만 같은보기를 제공하는 두 가지 방법 (각 컨트롤러에 하나씩)을 방지하는 방법은 무엇입니까? 몇 가지 옵션 :

  • 이벤트 편집을 구현하는 동일한 기본 클래스의 두 컨트롤러를 모두 서브 클래 싱하십시오. 기본 클래스 만 가질 수 있으므로이 작업은 한 번만 수행하면됩니다. 다른 공유 기능이 있으면이 모든 것이 기본 클래스로 들어갑니다.
  • 두 컨트롤러의 편집 기능을 다른 클래스 (EditEventController?)에 위임하십시오.
  • 페이지가 부분적으로 만 업데이트되므로 AJAX 양식을 사용하십시오. 이것은 상황을 복잡하게합니다.

요약하면 : MVC 3 응용 프로그램의 다른 영역/컨트롤러간에 편집 페이지를 공유하려면 어떻게해야합니까? 댓글이 너무 작았으로

는 @Added : 내가 그 역할에 대한 사이트의 특정보기를 원하기 때문에 내가 역할에 대한 지역의를 사용하고

. 하위 섹션 이벤트/사용자 및 기타 모든 관리 작업을 포함하는 관리 영역과 같습니다. 이 관리 영역에는 관리 영역의 이벤트 섹션을 처리하는 eventscontroller가 있습니다. 또 다른 영역은 발기인의 영역입니다. 그것은 사이트의 논리적 인 부분처럼 보였습니다 (영역 당 레이아웃을 제어 할 수 있고 특정 역할을 요구하는 기본 컨트롤러를 사용할 수 있기 때문에). 이게 실용적이지 않다는 말인가요? 나는 하나의 이벤트 컨트롤러에 대한 아이디어를 좋아하지만 어떻게 현재의 역할에 따라 다른 레이아웃 페이지/메뉴를 얻는가 ??

답변

0

하나의 컨트롤러에 있어야합니다. 역할과 라우팅으로 "영역"을 혼합하는 것처럼 들립니다.

두 URL은 서로 다른 컨트롤러/영역이 아닌 한 동작 방법에 매핑되어야합니다.

"이벤트"는 영역이어야하며 [Authorize] 속성 또는 사용자 정의 속성을 사용하여 관리자와 발기인이 모두 볼 수있게해야합니다.

응용 프로그램의 각 논리 구성 요소에 대한 영역을 만들거나 DDD- 말하는 것을 선호하는 경우 각 "집계"를 시도하십시오.

당신의 이벤트 영역에 따라서

,이 같은 경로 수 :

routes.MapRoute(
       "Default",            
       "{role}/{controller}/{action}/{id}",     
       new { controller = "Events", action = "Index", id = "" }, 
       new { role = new RoleBasedRouteConstraint() } // or you could use regex.. 
      ); 

을 그리고뿐만 아니라, 역할에 해당하는 문자열 값으로 제한하는 역할 경로 토큰 경로 제약 조건을 사용하여 역할 기반 권한 부여.

+0

어떻게하면 이벤트 컨트롤러에 매핑되는 '/ admin/event/edit/1'과 같은 URL을 가질 수 있습니까? 컨트롤러가 어떤 역할을 맡고 있는지 어떻게 알 수 있습니까? – Gluip

+0

@Gluip - 컨트롤러에서'[Authorize (Roles = "Admin, Promoter")]'를 사용할 수 있습니다 - 그게 무슨 뜻입니까? – RPM1984

관련 문제