문제

나는 관습이있다 SiteMapProvider (데이터베이스에서 채워진) 및 사용자 정의 AuthorizeAttribute 컨트롤러 클래스에 대한 (현재 사용자 역할 + 요청 된 페이지).

기능을 구현해야합니다 SiteMapProvider.IsAccessibleToUser(context, node). 나는 또한 구현해야한다 AuthorizeAttribute.AuthorizeCore(context).

이 두 기능은 어떻게 관련되어 있습니까? 어떤 방법이 없어 '기인하다'사이트 Approvider?

일부 코드 :


편집하다: 이것이 해결책 일 수 있습니다 (내부 AuthorizeCore())? context 그러나 그렇습니다 HttpContextBase, 그리고 IsAccessibleToUser() 만 소요됩니다 HttpContext 매개 변수로.

If Not SiteMap.Provider.IsAccessibleToUser(context, SiteMap.CurrentNode) Then

현재 코드 :

Public Class CustomValidateAuthorization : Inherits AuthorizeAttribute
    Public Sub New()

    End Sub

    Protected Overrides Function AuthorizeCore(ByVal httpContext As System.Web.HttpContextBase) As Boolean
        If Not Global.Page.IsAccessibleToUser(httpContext.User) Then
            //Exception or redirect (in exception)?
            // or return false?
        End If

        Return True
    End Function
End Class

Public Class CustomSiteMapProvider : Inherits StaticSiteMapProvider
Public Overrides Function IsAccessibleToUser(ByVal context As System.Web.HttpContext, ByVal node As System.Web.SiteMapNode) As Boolean
    Dim p As New BLL.Page
    p.LoadFromSiteMapNode(node)

    Return p.IsAccessibleToUser(context.User)
End Function
End Class
도움이 되었습니까?

해결책

현재 기본 SetemApprovider를 두 번 사용하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top