2011-02-23 9 views
5

System.Web.Mvc.AuthorizeAttribute에서 파생 된 사용자 지정 인증 특성을 작성했습니다. 내 컨트롤러에서 성공적으로 특정 기능에 대한 액세스를 제한하고 있습니다.인증 코드 중복의 방지 방법

public class ArticleController : Controller 
{ 
    [CustomAuthorize(Role.Administrator)] 
    public ActionResult Delete(int id) 
    { 
     // ... 
    } 
} 

그리고 제대로 작동합니다. 이제 같은 인증 논리에 따라 HTML 요소를 표시하거나 숨기려고합니다. 예를 들어 내 "기사"보기에서 사용자가 관리자가 아닌 경우 작업 버튼 "삭제"를 숨기려고합니다.

<ul id="menu"> 
    <li>@if (User.IsInRole(Role.Administrator)) { 
      @Html.ActionLink("Delete", "Delete", "Article", new { id = article.ID }, null) 
     } </li> 
</ul> 

그것은뿐만 아니라 잘 작동하지만 내가 작업 수행을 두 번 필요한 credientials를 지정해야하기 때문에 코드 로직의 중복을 만듭니다 : 그 같은 것을 작성한 컨트롤러에서

  • 을 액션을 차단하거나 허용합니다.
  • 동작 링크를 표시하거나 숨기는보기입니다.

이 중복을 피하는 가장 좋은 방법은 무엇입니까? 뷰에서 내 사용자 정의 인증 속성을 재사용 할 수있는 방법이 있습니까?

답변

3

사용자 지정 도우미는 최선의 선택, 같은 것을해야한다.

1

메뉴를 부분보기로 만듭니다.

1

나는 이것을 위해 맞춤형 HTML 도우미를 만들 것이다.

그리고 Role 매개 변수가 중복 된 것으로 생각되면 Reflection을 사용하여 컨트롤러 작업을 검사하고 허용 된 역할을 자동으로 결정할 수 있습니다. 현재 사용자/역할이 링크에 대한 권한이 있는지 확인하기 위해이 헬퍼 서비스의 어떤 종류를 확인 할

@Html.SecureActionLink("Delete", "Delete", "Article") 

: