У меня есть пользовательский SiteMapProvider
, который я заполняю из базы данных. У меня также есть пользовательский SiteMapNode
, который должен быть создан с пользовательским аргументом Page
.
Реализация SiteMapProvider.IsAccessibleToUser(context, node)
теперь:
Public Overrides Function IsAccessibleToUser(context, node) As Boolean
Return CType(node, CustomSiteMapNode).Page.IsAccessibleToUser(context.User)
End Function
У меня тоже есть кастом 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
Два вопроса:
- Должен ли я возвращать false в AuthorizeCore (), чтобы все работало в соответствии с протоколами авторизации по умолчанию? (Что это?) Или я должен выбросить свое исключение ..?
- SiteMap.CurrentNode имеет значение Null / Nothing (в AuthorizeCore ()), если запрашиваемая страница недоступна для пользователя (очевидно). Как мне изменить мою реализацию? Я хочу сохранить функциональность, состоящую в том, что
Page
объекты загружаются только один раз, поэтому мне нужно хранить их где-то ... Я очень растерян / психическая блокировка.