J'ai un SiteMapProvider
personnalisé que je remplis à partir d'une base de données. J'ai également une coutume SiteMapNode
qui doit être construite avec un argument Page
personnalisé.Chargement efficace du plan du site à partir de la base de données?
La mise en œuvre de SiteMapProvider.IsAccessibleToUser(context, node)
est maintenant:
Public Overrides Function IsAccessibleToUser(context, node) As Boolean
Return CType(node, CustomSiteMapNode).Page.IsAccessibleToUser(context.User)
End Function
J'ai aussi une coutume authentication class-attribute
:
Public Class ValidateAuthorization : Inherits AuthorizeAttribute
Public Sub New()
End Sub
Protected Overrides Function AuthorizeCore(context) As Boolean
If Not CType(SiteMap.CurrentNode, JrcSiteMapNode).Page.IsAccessibleToUser(httpContext.User) Then
Throw New ApplicationException()
End If
Return True
End Function
End Class
Deux questions:
- Dois-je retourner false dans AuthorizeCore() pour que tout fonctionne selon les protocoles d'autorisation par défaut? (Qu'est-ce que c'est?) Ou devrais-je jeter mon exception ..?
- SiteMap.CurrentNode est Null/Nothing (dans AuthorizeCore()) si la page demandée n'est pas accessible à l'utilisateur (évidemment). Comment devrais-je changer ma mise en œuvre? Je veux garder la fonctionnalité que les objets
Page
ne sont chargés qu'une seule fois, donc j'ai besoin de les stocker quelque part ... Je suis très confus/blocage mental.