2009-03-06 3 views
0

사용자 세션에 대한 권한 정보를 보유하기 위해 라이트 세션 개체를 사용하는 사용자 지정 인증 방법을 사용하고 있습니다. 이제는 각 페이지 (주로 마스터의 하위 페이지)에서 사용자가 페이지에 액세스해야하는지 여부를 알 수 있어야합니다.하위 페이지가있는 ASP.NET의 사용자 지정

페이지 클래스를 만들고이 클래스에서 하위 페이지를 파생해야합니까?

애플리케이션이 어떤 페이지에 어떤 역할을 맡고 있는지 알 수있는 가장 좋은 방법은 무엇입니까?

답변

0

인증에 많은 유연성이 필요한 경우 사용자 정의 페이지 클래스를 사용하는 것이 좋습니다. 그렇지 않으면 Web.config이면 충분합니다.

0

사용자 지정 역할 공급자로 연결하면 사실 asp.net 구성에 의존 할 수 있습니다. 그런 다음 인증을 구성하는 Web.config의에 정상적인 접근 방식을 사용하여 얻을

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(
    "~/admin/test.aspx", principal, "GET" 
); 

: 당신은 사용자가 특정 페이지에 액세스 할 수있는 권한이 있는지 여부를 확인 할 수있는 방법이있다. 그렇게 할 때 페이지가 같은 폴더에 있으면 web.config를 해당 폴더에 추가하고 권한을 적절히 구성하면됩니다.

0

이 같은 시나리오에서 나는 폴더에 인증이 필요한 페이지를 넣어 그 같은 인증을 구성하는 Web.config의 위치 요소를 정의

<location path="protected"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 
1

나는 기본 페이지 접근 방식을 좋아하지 않는다. 나에게 보안 정보를 확인하기에는 너무 늦었다. 자신의 HttpModule을 만들어 인증 정보를 데이터베이스/xml/...에 저장하거나 페이지의 리플렉션을 사용하여 읽을 수 있습니다.

context.Handler는 실행중인 클래스 페이지를 보유합니다. 따라서이 같은 일을 할 수 있습니다

을 내가 사용하는 코드의 일부를 복사, 그것은, 역할, 공개 페이지를 검사 이미지와 스크립트 (하지만 당신은뿐만 아니라 그것을 할 수있다)에 대한 검사 생략 :

// In the HttpModule: 
    public void context_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     HttpContext context = HttpContext.Current; 

     // Don´t validate permissions if the user wasn´t allowed by the asp.net security 
     // Neighter the advanced (custom) permissions are validated for non ASPX files. 
     if (!context.Request.FilePath.EndsWith(".aspx") || !context.User.Identity.IsAuthenticated) 
      return; 

     // Give full access to the unathorized error page, and logins, and so on... 
     string pageClass = context.Handler.GetType().BaseType.FullName; 

     string param = context.Request["p"]; 
     if (!string.IsNullOrEmpty(param)) 
      pageClass += "@" + param; 

     if (SecurityService.IsFullTrustClass(pageClass)) 
      return; 

     if (SecurityService.Context.CurrentPerson == null) 
     { 
      LogOff(); 
      return; 
     } 

     // Verify access permissions for the current page 
     IList<Role> roles = SecurityService.Context.CurrentPerson.Roles; 
     bool allow = SecurityService.HasAccessPermission(pageClass, roles); 

     if (!allow) 
     { 
      LogOff(); 
     } 
    }