2013-06-09 2 views
7

저는 작업중인 프로젝트에 대한 동적 역할 기반 탐색 솔루션을 만드는 방법을 찾아 냈습니다.역할 기반 탐색

내비게이션에는 사용자 역할과 관련된 링크 만 표시되어야합니다 (예 : 관리자). 응용 프로그램 통계보기, 고객 계정 관리 등의 링크가 있습니다. 표준 사용자는 관리 할 링크가있는 반면 계정은

내가 현재 확인하는 역할에 대한 몇 가지 기본적인 조건문하고 해당 링크를 표시하는 마크 업의 혼합으로 탐색 라는 단일 부분도 있습니다 .. 요법 친구와 통신합니다. 이 방법은 효과가 있지만 빠르게 관리하기 어려울 수 있습니다.

탐색 부분보기 :

@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 

뷰에서이 논리를 얻고 컨트롤러이 처리 할 수있는 방법이 있습니까? 제안으로

+1

부분적으로 하위 작업 방법을 사용합니까? –

+0

Dave에게 감사드립니다. 아니 그렇지 않아. 전에 실제로 아동 행동을 사용하지 않았습니까? 질문을 확대해도 될까요? 이 시나리오에서 어떤 하위 작업이 재생 될지 확실하지 않습니다. – mezmi

+4

어린이 작업은 훌륭합니다. 그것들은 모델을 다시 부분적으로 당신에게 넘기는 행위입니다. 'Action ("/ Controller/Action/id")'이라고 부를 것이다. id 부분은 생성하려는 nav에 대한 핸들이 될 수 있으며 모델은 nav 항목의 목록이 될 수 있습니다. 더 나아가서, 자녀의 행동은 논쟁없이 사용자의 역할을 찾아보고 적절한 탐색 바를 반환 할 수 있습니다. 이전에는 역할 기반 탐색에이 기능을 사용했습니다. –

답변

14

솔루션

, 나는 ChildAction라는 메뉴 및 각 역할에 대한 부분적인 뷰를 만들었습니다. 액션 내에서 몇 가지 조건문을 사용하여 역할을 확인하고 적절한보기를 렌더링합니다.

이렇게하면 뷰에서 조건문을 벗어나게되므로 훨씬 깨끗한 해결책이됩니다.

정리를 위해 할 수있는 몇 가지 사항이 있으며 계속 개선하기 위해 노력할 것이라고 확신합니다.

여기에 제가 사용한 해결책이 있습니다.

레이아웃보기에서 메뉴를 표시하려면이 도구를 사용하십시오.

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

그런 다음 Navigation이라는 컨트롤러를 만들고 Menu라는 단일 액션을 추가했습니다.

public class NavigationController : Controller 
{ 

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

     } 

     return PartialView("_NavigationPublic"); 
    } 

}