2012-02-28 16 views
0

新しいMVC4 DbDataControllerを使用して、安らかなデータAPIを公開しようとしています。DbDataControllerで属性がフィルタリングされない

私の問題はこれを保護しようとしています。私は許可属性から派生したカスタム許可属性を作成しました

public class AdminOnlyAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
    if (!IsAllowed()) { 
     filterContext.Result = new HttpUnauthorizedResult("Not logged in"); 
    } 
    ... 
} 

これは正常なコントローラの操作に適用するとうまく動作します。私はこのように私のデータサービスで同じものを使用しようとしている:

[AdminOnlyAttribute] 
public class DataServiceController : DbDataController<AppBuilderDataContext> 
{ 
    [AdminOnlyAttribute] 
    public IQueryable<Thing> GetThings() 
    { 
    return DbContext.AllMyThings(); 
    } 
} 

あなたは、私は、コントローラとアクションの両方で、私の属性を試みたが、それは1のどちらかのために発射いない見ることができます。私はauthorize属性関数内にブレークポイントを設定していますが、呼び出されません。

Scott Guthrieはこれがうまくいくと言いました。私はそれを間違っているのですか、またはこれらを確保するために全く別の方法が必要ですか? DataControllerまたはApiControllerあなたの属性から派生した任意の他のタイプで動作するように

答えて

3

は、応答のためのSystem.Web.Http.AuthorizeAttribute

+0

おかげから派生しなければなりません。これはSystem.Web.Mvc.AuthorizeAttributeとは少し異なります。それについては、非常に短いmsdnの存在の認知を除いて、これについてはまだinterwebs上に何もありません。 私の最初の質問は、このタイプの属性は私の通常のMVCアクションでも機能するのでしょうか?それとも、重複する認可属性クラスが必要ですか? – GeekyMonkey

+0

ベータ版では、MVCコントローラ用とAPIコントローラ用の2種類の属性が必要です。我々はこれをenxtドロップで改善することを検討しています。 – marcind

+0

私は、カスタムRoleProviderを作成し、これを私のDbDataControllerの上に置くことで問題を回避しようと決めました 'AuthorizeAttribute = System.Web.Http.AuthorizeAttribute;を使用して ' 私はこれを自分のデータアクションまたはクラス) '[Authorize(Roles =" SuperAdmin ")]' 私はまだ必要なすべてを行うわけではありませんが、それはスタートです。場合によっては、特定のレコードにアクセスできるかどうかを調べるためにユーザーレコードを調べる必要があるため、レコードをカットしません。 これらの新しいコントローラで動作するのと同じMVCフィルタがあれば、もっとうれしいでしょう。 – GeekyMonkey

関連する問題