Pergunta

Eu tenho um costume SiteMapProvider (preenchido no banco de dados) e um personalizado AuthorizeAttribute (valida as funções atuais dos usuários + página solicitada no banco de dados Role_Page) para classes de controlador.

Eu tenho que implementar a função SiteMapProvider.IsAccessibleToUser(context, node). Eu também tenho que implementar AuthorizeAttribute.AuthorizeCore(context).

Como essas duas funções estão relacionadas? Não há alguma maneira de 'atributo'O SITEMAPROVER?

Algum código:


editar: Pode ser uma solução (dentro AuthorizeCore())? context No entanto, é HttpContextBase, e IsAccessibleToUser() apenas leva HttpContext como parâmetro.

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

Código atual:

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
Foi útil?

Solução

Atualmente, uso o sitemaprovider padrão duas vezes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top