2

J'ai un SiteMapProvider personnalisé (rempli à partir de la base de données) et un AuthorizeAttribute personnalisé (valide les rôles des utilisateurs actuels + page demandée par rapport à la base de données Role_Page) pour les classes de contrôleur.custom AuthorizeAttribute + custom SiteMapProvider related?

Je dois implémenter la fonction SiteMapProvider.IsAccessibleToUser(context, node). Je dois également mettre en œuvre AuthorizeAttribute.AuthorizeCore(context).

Comment ces deux fonctions sont-elles liées? N'y at-il pas un moyen de 'attribut' le SiteMapProvider?

Certains code:


modifier:Serait-ce une solution (à l'intérieur AuthorizeCore())?context est cependant HttpContextBase, et IsAccessibleToUser() prend seulement HttpContext comme paramètre.

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

code actuel:

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 

Répondre

0

J'utilise actuellement le SiteMapProvider par défaut deux fois.