2012-10-30 2 views
0

왼쪽 메뉴 패널이있는 ASP.NET MVC4 응용 프로그램을 만들고 오른쪽 패널이 내용 패널이됩니다. (@RenderBody)ASP.NET MVC 응용 프로그램에서 액세스 권한을 쿼리하는 모범 사례

메뉴의 링크는 사용자의 로그인 역할을 기반으로 생성됩니다. 예를 들어 액세스 권한이 높은 사용자는 메뉴에서 더 많은 링크를 볼 수 있습니다. 이러한 액세스 권한은 데이터베이스에 저장됩니다.

내 페이지가 모두 상속하는 _Layout.cshtml 페이지가 있습니다.

로그인 중에 데이터베이스에서 액세스 만 검색되도록 액세스 메뉴를 코딩하는 방법은 무엇입니까? 그 다음에 사용자가 탐색하는 모든 페이지에서 그의 액세스 권한을 위해 데이터베이스를 다시 질의 할 필요가 없습니다.

내 액세스 메뉴 페이지에 Html.RenderAction 또는 Html.Partial을 사용해야합니까?

+0

:

는 다음을 확보해야 컨트롤러와 액션에 Authorize 속성을 넣어? – DarthVader

+0

내 데이터베이스를 쿼리하고 메뉴 링크가 포함 된보기를 반환하는 컨트롤러를 호출하는 RenderAction()? –

답변

0

나는이 작업을 수행하는 가장 쉬운 방법은 당신이 NuGet를 사용하여 프로젝트에 추가 할 수있는 MVCSiteMapProvider을 사용하는 것입니다라고 말하고 싶지만 .

옵션 securityTrimmingEnabled은 사용자가 사이트 맵에서 볼 권한이없는 항목을 자동으로 제거하므로 메뉴에서 볼 수 있습니다.

로그인 중에 데이터베이스에서 액세스 만 검색되도록 액세스 메뉴를 코딩하는 방법은 무엇입니까?

RoleProvider을 사용하여 역할을 가져야합니다. 역할에 대한 자체 데이터베이스 스키마가있는 경우 사용자 지정 역할 공급자를 작성해야 할 수 있습니다. 사용자 지정 역할 공급자는 캐싱을 구현하여 데이터베이스에 너무 자주 도달하지 않도록하거나 너무 많은 역할이 없으면 CacheRolesInCookie 속성을 사용할 수 있습니다. 당신은`HTML.RenderAction()`를 사용하려면 어떻게

[Authorize(Roles="SomeRole")] 
public ActionResult MyAction() 
{ 
    ... 
} 
+0

내 시스템에서 관리자가 더 많은 역할을 추가 할 수 있기 때문에 하드 코드 된 역할 = "SomeRoles"사용을 피할 수 있습니까? –

+0

사용자 지정 권한 부여 특성을 만드는 방법 중 하나는 http://msdn.microsoft.com/en-us/library/ee707357(v=vs.91).aspx입니다. – Joe

0

공유 폴더에서 'Navigation.cshtml'이라는 부분 뷰를 정의 할 수 있습니다. 그리고 당신의 _Layout.cshtml, 당신은

<div id="left-menu"> 
    @Html.Partial("Navigation") 
</div> 

처럼 전화를 걸 수 있습니다 당신의 Navigation.cshtml는 RenderAction 모양의 논리적으로 올바른와

@if(Request.IsAuthenticated) { 
    // show links for authenticated user. 
} 
else { 
// show links for non-authenticated user. 
} 
관련 문제