2013-02-13 3 views
2

작은 관리 페이지를 추가하려는 ASP.NET MVC 웹 사이트가 있습니다. 내가 가진 문제는이 모든 것을 배포 할 것이고 SSL을 사용할 수 없게 될 것입니다. 관리자에게 원격 데스크톱을 요구하고 로컬 브라우저를 사용하여 관리를 수행하는 것이 좋습니다.ASP.NET MVC 앱 관리 사이트를 LocalHost에만 잠급니다.

이 작업을 수행 할 수 있습니까? 기본적으로 내 관리 페이지를 제외하고 <customeErrors mode="RemoteOnly" />과 동일한 동작을 얻으려고합니다. web.config를 통해이 작업을 수행 할 수 있습니까?

답변

9

Request.IsLocal은 (는) 친구입니다.

http://msdn.microsoft.com/en-us/library/system.web.httprequest.islocal.aspx

당신은 요청이 로컬 컴퓨터에서오고 있는지 확인하기 위해 그것을 사용할 수 있습니다.

사용자 정의 속성은

그런 다음 사용자 지정 특성 수 있도록이 확장 할 수 있지만, 과잉 될 수 있습니다.

Custom Attributes on ActionResult

MVC3는 이후 사용자가 액세스를 잠글 수 있도록, 너무 방법이 아니라, 컨트롤러 레벨에서 속성을 설정할 수 있습니다 : 그 경로 인 경우이 비슷한 무언가를 좋은 예입니다 선택 전체 컨트롤러는 관리자 페이지를 담당합니다.

+0

코어에서 Request.IsLocal을 사용하는 자체 Authorize 속성을 만드는 것이 합리적일까요? – Nate

+0

예. 내 편집의 링크를 참조하십시오. – KingCronus

6

나는이 같은 고객 속성을 작성하여 그것을했다 :

public class IsLocalAttribute : AuthorizeAttribute 
{ 
    public bool ThrowSecurityException { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isLocal = httpContext.Request.IsLocal; 
     if (!isLocal && ThrowSecurityException) 
      throw new SecurityException(); 
     return isLocal; 
    } 
} 
전체 컨트롤러

기본 사용법 :

public class SomeController : Controller 
{ 
    [IsLocal] 
    public ActionResult LocalOnlyMethod() 
    { 
     return View(); 
    } 
} 

:

[IsLocal] 
public class LocalOnlyController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

또는 특정 방법에

302 리디렉션 대신 보안 예외를 throw하려는 경우 :

public class SomeController : Controller 
{ 
    [IsLocal(ThrowSecurityException = true)] 
    public ActionResult LocalOnlyMethod() 
    { 
     return View(); 
    } 
} 
관련 문제