Frage

Ich habe einen Brauch SiteMapProvider (aus der Datenbank besiedelt) und ein benutzerdefinierter AuthorizeAttribute (Validiert aktuelle Benutzerrollen + angeforderte Seite gegen Rollen -Datenbank) für Controller -Klassen.

Ich muss die Funktion implementieren SiteMapProvider.IsAccessibleToUser(context, node). Ich muss auch implementieren AuthorizeAttribute.AuthorizeCore(context).

Wie hängen diese beiden Funktionen zusammen? Gibt es keinen Weg zu 'Attribut'Der Sitemapprovider?

Ein Code:


bearbeiten: Könnte dies eine Lösung sein (im Inneren AuthorizeCore())? context Jedoch ist HttpContextBase, und IsAccessibleToUser() nur nimmt HttpContext als Parameter.

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

Aktueller Code:

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
War es hilfreich?

Lösung

Derzeit verwende ich den Standard -Sitemapprovider zweimal.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top