如何处理应用程序安全性?使用ActionFilterAttribute和/或SiteMap授权..?

时间:2010-01-12 16:51:30

标签: asp.net-mvc vb.net security sitemap

我创建了以下ActionFilterAttribute以检查是否授予用户访问页面的权限。我还创建了两个自定义Exceptions来处理不同的方案:NotLoggedInExceptionInsufficientPrivilegeException

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并抛出异常..?
  3. 注意:正如您所看到的,我正在为BLL.Page使用自定义类。这是一个ORM页面,其中包含存储在数据库中的基于角色的安全性。还会根据此数据填充SiteMap

1 个答案:

答案 0 :(得分:4)

不要重新发明AuthoriazeAttribute。您的版本不会处理缓存的操作;内置的AuthorizeAttribute会。 If you need to customize your authentication, then customize the membership provider or subtype AuthorizeAttribute,而不是重塑MVC安全。