3

パーミッションのシステムを確立したASP.NETMVCWebサイトがあります。たとえば、現在のユーザーに十分な権限がない場合に非表示になるリンクがいくつかあります。ただし、そのリンクのURLを手動で入力した場合でも、コンテンツにアクセスできます。

この属性を使用して[Authorize]、適切なユーザーロールを持たないユーザーを防ぐことができますが、カスタム要件を満たさないユーザーのアクションをブロックするために、各アクション内に手動チェックを作成せずに、独自の属性を実装するにはどうすればよいですか?

4

2 に答える 2

9

カスタム属性を記述し、カスタム認証ロジックを配置できるメソッドAuthorizeをオーバーライドできます。AuthorizeCore

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authroized = base.AuthorizeCore(httpContext);
        if (!authroized)
        {
            return false;
        }

        // at this stage the base authorization process has passed.
        // now implement your custom authorization logic and return true or false

        // here you have access to the HttpContext and as a consequence to all
        // request and route parameters so you could implement any 
        // authorization logic you want

        // And of course if you want a completely custom authorization logic 
        // ignoring the base functionality don't call the base method above
        // but completely override anything here
    }
}

あとは、対応するコントローラー/アクションをこのカスタム属性で装飾するだけです。

于 2012-06-18T21:21:23.193 に答える
1

ASP.NET メンバーシップを使用している場合は、RoleProvider を構成して、ユーザーに役割を与えることができます。

次に、AuthorizeAttribute の Roles プロパティを使用して、ロールを確認できます。

[Authorize(Roles="Admin, SuperUser")]
于 2012-06-18T21:22:03.583 に答える