我有一个用于控制器类的自定义SiteMapProvider
(从数据库填充)和一个自定义AuthorizeAttribute
(验证当前用户角色 + 针对 Role_Page 数据库请求的页面)。
我必须实现该功能SiteMapProvider.IsAccessibleToUser(context, node)
。我也必须实施AuthorizeAttribute.AuthorizeCore(context)
。
这两个函数有什么关系?是否有某种方法可以对 SiteMapProvider 进行“属性化”?
一些代码:
编辑: 这可能是一个解决方案(内部AuthorizeCore()
)吗? context
然而是HttpContextBase
,并且IsAccessibleToUser()
只HttpContext
作为参数。
If Not SiteMap.Provider.IsAccessibleToUser(context, SiteMap.CurrentNode) Then
当前代码:
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