1

私は、MVC 4.0 プロジェクトのメソッド用のカスタム メンバーシップ プロバイダーを作成する任務を負っています。

属性 (?) に基づいて[Authorize]、試行されたユーザーがメソッドの使用を許可されているかどうかを特定する必要があります。

現在、私はこれを持っています:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class TestAuthorize : CodeAccessSecurityAttribute
{
    public TestAuthorize(SecurityAction action)
        : base(action)
    {
    }

    public override IPermission CreatePermission()
    {
        throw new NotImplementedException();
    }
}

追加する return new PrincipalPermission(null,null,true)と、権限が有効であり、ユーザーがメソッドにアクセスできることが期待されます。

追加する return new PrincipalPermission(null.null,false)と、アクセス許可が無効になると予想され、ユーザーはメソッドへのアクセスを拒否されます。

throw new SecurityException("You are denied access")ただし、この例外がクライアント側で処理されない限り (try catch を使用して)、MVC アプリケーションを強制的に停止する を使用すると、継続が停止するだけです。

MVC プロジェクトでこの例外を処理することは可能ですか?

属性を使用してやりたいことの例として:

[TestAuthorize(SecurityAction.Demand)]
public List<string> GetList()
{
    //if access, return new List();
    //if no access, return null;
}  
4

1 に答える 1

1

AuthorizeAttributeではなく、ここから継承したいのは確かですCodeAccessSecurityAttribute。あなたの属性では、ユーザーが続行を許可されるべきかどうか、そしてそのメソッドが行うことを許可されていないかどうかをオーバーライドAuthorizeCoreして単純に返します。結果によって応答がトリガーされ、ASP.NET はユーザーをログイン ページにリダイレクトして自動的に処理し、適切なアクセス権を持つユーザーとしてログインできるようにしますが、必要に応じてこの動作を変更することもできます。truefalsefalseHTTP-401 Unauthorised

実際、独自の属性を作成する必要さえない場合もあります。既存の ASP.NET MVC メンバーシップ プロバイダーを使用している場合、またはそれをうまく利用するために使用しているものをすべて取得できる場合は、既存のものを使用AuthorizeAttributeできます。

于 2013-03-12T16:07:42.933 に答える