2

asp.net mvc-4 Web アプリケーションでカスタム ロール プロバイダーを使用しています。

「CustomRoleProvider」クラスでは、「RoleProvider」インターフェイスを拡張し、クラスの「IsUserInRole」、「GetRolesForUser」、および「GetAllRoles」関数をオーバーライドしました。それはうまくいきます。

ユーザーがアクセス権のないアクションにアクセスしようとすると、カスタム ページ (「~/Security/AccessDenied/Index」など) をリダイレクトしようとしています。ユーザーがデフォルトでそれを行おうとすると、ホームページにリダイレクトされます。カスタム ページをリダイレクトするために、'AuthorizeAttribute' インターフェイスを拡張し、'OnAuthorization' 関数をオーバーライドしました。しかし、「OnAuthorization」関数は呼び出されていないようです。

「AuthorizeAttribute」インターフェースを拡張するコードは次のとおりです。

public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        if (filterContext.Result is HttpUnauthorizedResult)
        {
            filterContext.Result = new RedirectResult("~/Security/AccessDenied/Index");
        }
    }
}

「OnAuthorization」関数が呼び出されないのはなぜですか? 助けが必要...

4

1 に答える 1

2

カスタム属性をアクションまたはコントローラーに適用する (またはすべてのリクエストの一般的なフィルターとして追加する) 必要があります。Authorize 属性の代わりにカスタム属性を使用します。

[AccessDeniedAuthorize(Roles="Admin")] 

動作するはずです。

于 2013-11-04T10:46:04.417 に答える