2

コントローラー クラスのカスタム(SiteMapProviderデータベースから入力) とカスタムAuthorizeAttribute(現在のユーザー ロール + 要求されたページを Role_Page データベースに対して検証) があります。

関数を実装する必要がありますSiteMapProvider.IsAccessibleToUser(context, node)。も実装する必要がありますAuthorizeAttribute.AuthorizeCore(context)

これらの 2 つの機能はどのように関連していますか? SiteMapProviderに「属性」を付ける方法はありませんか?

いくつかのコード:


編集: これは解決策かもしれません(内部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
4

1 に答える 1