سؤال

لدي مخصص SiteMapProvider (مكتظة من قاعدة البيانات) وعرف AuthorizeAttribute (التحقق من صحة أدوار المستخدمين الحاليين + الصفحة المطلوبة مقابل قاعدة بيانات rob_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
هل كانت مفيدة؟

المحلول

أستخدم حاليًا Sitemapprovider الافتراضي مرتين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top