Как мне управлять безопасностью приложений? используя ActionFilterAttribute и / или SiteMap авторизацию ..? - PullRequest
1 голос
/ 12 января 2010

я создал следующее ActionFilterAttribute, чтобы проверить, предоставлен ли пользователю доступ к странице.Я также создал два пользовательских Exceptions для обработки различных сценариев: NotLoggedInException и InsufficientPrivilegeException.

ActionFilterAttribute

Public Class ValidateAuthentication : Inherits ActionFilterAttribute
    Private _page As BLL.Page

    Public Sub New(ByVal Page As BLL.Page)
        Me._page = Page
    End Sub
    Public Overrides Sub OnActionExecuting(ByVal filterContext As System.Web.Mvc.ActionExecutingContext)
        Select Case Me._page.IsAccessibleToUser(filterContext.HttpContext.User)
            Case -1
                Throw New NotLoggedInException()
            Case 0
                Throw New InsufficientPrivilegeException()
            Case 1
                //access granted
        End Select
    End Sub
End Class

У меня также есть собственный SiteMapProvider, гдеЯ реализовал свою собственную функцию IsAccessibleToUser ().Так что у меня тоже есть securityTrimming.

SiteMapProvider

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)


    Select case p.IsAccessibleToUser(context.User)
        Case 1
            Return true
        Case else
            Return false
    End Select
End Function

Вопросы:

  1. Где я могу поймать исключения, например, для перенаправления пользователей, если они не авторизованы?
  2. Должен ли я использовать авторизацию SiteMap где-то еще вместо использования ActionFilterAttribute и создания исключений ..?

примечание: как вы можете видеть, я использую пользовательский класс для BLL.Page.Это страница ORM с защитой на основе ролей, которая хранится в базе данных.SiteMap также заполняется на основе этих данных

1 Ответ

4 голосов
/ 12 января 2010

Не изобретать заново AuthoriazeAttribute. Ваша версия не будет обрабатывать кэшированные действия; встроенный AuthorizeAttribute будет. Если вам нужно настроить аутентификацию, то настройте поставщика членства или подтип AuthorizeAttribute, а не заново изобретайте безопасность MVC.

...