ASP.NET MVC:カスタム認証とMvcSiteMapProvider

asp.net-mvc c# sitemap
ASP.NET MVC:カスタム認証とMvcSiteMapProvider

ASP.NET MVCでは、何らかの方法でMvcSiteMapProviderを使用してカスタム認証を行いたいと思います。

AuthorizeAttributeを継承するカスタム認証属性を実装できることを認識しています。 次に、たとえば[SiteMapAuthorize]でコントローラーを装飾できます。

これが最良のルートですか? その場合、私が探しているのは、authorizeでサイトマッププロバイダーを使用する適切な実装です。

public class SiteMapAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {

    }
}

助けてくれてありがとう!

  0  1


ベストアンサー

私はこれが機能している

これが私の解決策です:

public class SiteMapAuthorizeAttribute : AuthorizeAttribute
{
    public string Action { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (!httpContext.User.Identity.IsAuthenticated)
            return false;

        var node = SiteMap.CurrentNode;

        // If the node is null, then it was not loaded into memory
        // because this user was not authorized to view this node
        if (node == null)
            return false;

        // Check the node's accessibility regardless in case we got passed the above check
        return node.IsAccessibleToUser(HttpContext.Current);
    }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        // If user is not authenticated allow default handling
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            base.HandleUnauthorizedRequest(filterContext);
            return;
        }

        string customErrorPage = GetCustomError("403");
        if (customErrorPage == null)
        {
            base.HandleUnauthorizedRequest(filterContext);
            return;
        }

        // Redirect to 403 (Access Denied) page
        filterContext.Result = new RedirectResult(customErrorPage);
    }

    private string GetCustomError(string statusCode)
    {
        CustomErrorsSection customErrorsSection = ConfigurationManager.GetSection("system.web/customErrors") as CustomErrorsSection;

        if (customErrorsSection != null)
        {
            CustomError customErrorPage = customErrorsSection.Errors[statusCode];

            if (customErrorPage != null)
                return customErrorPage.Redirect;
        }
        return null;
    }
}

HandleUnauthorizedRequestは、web.configのcustomErrorsセクションで機能します。

上記のcustomErrorsを機能させるには、エラーコントローラーが必要です。http://devstuffs.wordpress.com/2010/12/12/how-to-use-customerrors-in-asp-net-mvc-2/ [How to ASP.NET MVC 2でCustomErrorsを使用する]

0


タイトルとURLをコピーしました