Domanda

Ho un SiteMapProvider personalizzato (popolata da database) e un AuthorizeAttribute personalizzato (convalida gli utenti attuali ruoli + pagina richiesta contro la base di dati Role_Page) per classi controller.

Devo implementare la funzione SiteMapProvider.IsAccessibleToUser(context, node). Devo anche implementare AuthorizeAttribute.AuthorizeCore(context).

Come sono legate queste due funzioni? Non c'è un modo per ' di attributo ' il SiteMapProvider?

Alcuni codice:


modifica Potrebbe essere questa una soluzione (all'interno AuthorizeCore()) context però è HttpContextBase, e IsAccessibleToUser() solo prende HttpContext come? parametro.

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

codice corrente:

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
È stato utile?

Soluzione

Attualmente uso la SiteMapProvider predefinito due volte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top