2011-10-04 9 views
3

ここに記載されているようにカスタムAuthorizeAttributeクラスを作成したいとします:Override Authorize Attribute in ASP.NET MVCメソッドのパラメータをそのメソッドの属性に渡すことはできますか?

トリックが許可されたユーザーはちょうど彼が実行されているどのような方法ではない依存するが、かどうか、であるだけでなく、パラメータ:

基本的には、ユーザーはいくつかのファイルを参照することを許可されます
[MyCustomAuthorize(id)] 
[HttpGet] 
public ActionResult File(Guid id) 
{ 

} 

、他のものではないので、私は自分のカスタム権限属性にidを渡したいと思います。しかし、名前 'id'が範囲外であるため、これを行うようには見えません。

私は、メソッドの最初にユーザーがそのファイルにアクセスできることを確認するためのロジックを行うことができますが、これをすべて行う必要があるいくつかのメソッドがあります。それは[Authorize]属性の一部です。

答えて

1

いいえ、それは合法的ではありません。C#。

サブタイプAuthorizeAttributeの中のRouteValuesにアクセスできます。

の内側には、例えば、OnAuthorization、あなたが行うことができます:

object id = filterContext.RouteData.Values["id"]; 

は、しかし、注意してください。 本当にここで何をしているのかを知る必要があります。認証、認可、およびキャッシュ間の相互作用は複雑です。

+0

「実際に私がやっていることを知っている」カテゴリにはおそらく含まれません。代わりにそれぞれの方法の中に権限があるかどうかを確認することをお勧めしますか? – GendoIkari

+0

必ずしもそうではありません。アクション結果がキャッシュされている場合、ユーザーが 'GET'を実行したときに*は実行されません。したがって、アクションの権限チェックは実行されません。通常、役割提供者やAzManのような棚から離れたソリューションは、ホイールを再発明したくない人に最適です。 –

-2

多分、2011年の最後の答えは、そのバージョンでは正しいかもしれませんが、それは可能です。パブリックint(または必要なもの)を作成し、それを使用します。例:

public class RestrictToTemplateManagers : AuthorizeAttribute 
{ 
    public string GUID { get; set; } 
} 

[RestrictToTemplateManagers(GUID="ABC")] 
public class ImportTemplatesController : Controller 
{ 

} 
+0

あなたの答えは静的な値に基づいて答えを制限しますが、メソッドに渡されたものは制限しません。 –

関連する問題