2014-07-23 3 views
3

사용자의 역할에 따라 컨트롤을 숨기려고합니다. 예전에는보기에뷰의 역할 별 컨트롤

@if (User.IsInRole("Admin")) 
      {Html.ActionLink("RolesAdmin", "Index", "RolesAdmin")} 

과 같은 것을 할 수 있었지만 더 이상 작동하지 않는 것 같습니다. 많이 파고 들자면 아이덴티티 2.0은 전혀 사용하지 않는다는 것을 알게되었습니다.

뷰에서 직접 사용할 수있는 것이 있습니까? 아니면이 일을 완전히 잘못하고 있습니까?

+0

"관리자"에 대한 최고 수준의 링크 표시에 신원 샘플은 현재 비슷한 일을하고있는 것처럼이 여전히 잘 작동합니다 "정체성 2.0은 모든이를 사용하지 않습니다." 부정확하다. 아래 Hao의 대답을 참조하십시오. 수천 명의 고객이 자습서에서 역할이 잘 작동한다고보고합니다. http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth-sql-database/ – RickAndMSFT

답변

0

이 논리 유형은 컨트롤러 내부에 배치하는 것이 더 좋으며 렌더링을 위해 뷰를 남겨 둡니다.

컨트롤러에서 ChildActions 조합과 함께 Html.Action을 사용할 수 있으며 사용자 역할에 따라 부분 뷰를 렌더링 할 수 있습니다.

나는 잠시 전에 이와 비슷한 질문을 게시했으며 도움이된다고 생각합니다. 대한 명확한

Role Based Navigation

-EDIT-

이 새로운 ASP.NET 신원

이 레이아웃

@Html.Action("BuildNavigation", "Component") 

에 갈 것 그리고이 것을 사용하여 작동 당신의 컨트롤러가 되십시오.

public class ComponentController : Controller 
{ 

    [ChildActionOnly] 
    public ActionResult BuildNavigation() 
    { 

     if (this.User.IsInRole("customer")) 
     { 
      return PartialView("_NavigationCustomer"); 
     } 
     else 
     { 
      return PartialView("_NavigationBasic"); 
     } 


    } 
} 

올바른 방향으로 가야합니다.

+0

그건 멋진 솔루션이고, 내가 원했던 바로 그 순간에 바로 넣었습니다.하지만 불행하게도 실행을 시도했을 때 : "역할 관리자 기능이 활성화되지 않았습니다". 나는 어제이 차선 아래로 내려 왔고, 발견 된 모든 게시물은 막 다른 골목 인 것처럼 보이는 web.config에 RoleManager를 추가하라고 조언하고있었습니다. – RekaB

+0

나는이 답변을 사용하여 일하고있다. (http : //stackoverflow.com/a/24311573/2932714) – RekaB

+0

아래의 Hao의 솔루션은 두 가지 다른 뷰를 유지 관리 할 필요가 없다. 간단한 디스플레이/논리를 표시하지 않는 것이보기에 좋습니다. 비슷한 논리를 가진 Views \ Shared \ _LoginPartial.cshtml보기를 확인하십시오. – RickAndMSFT

0

  @if (Request.IsAuthenticated && User.IsInRole("Admin")) { 
       <li>@Html.ActionLink("RolesAdmin", "Index", "RolesAdmin")</li> 
       <li>@Html.ActionLink("UsersAdmin", "Index", "UsersAdmin")</li> 
      } 
+0

그냥 시도했지만 작동하지 않는 것 같은데 ...? – RekaB

+0

이러한 유형의 조건문은 실제로보기에 속하지 않습니다. 컨트롤러가이를 처리해야합니다. – mezmi

+1

이 문제가 발생하기 전에 nwdev의 요점은 MVC 패턴을 위반하는보기에서 역할 검사 코드를 사용하므로이 질문 (및 ID 샘플)이이 경우 MVC에 대한 모범 사례를 따르지 않는다는 것입니다. –

관련 문제