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
あなたの属性から派生した任意の他のタイプで動作するように
おかげから派生しなければなりません。これはSystem.Web.Mvc.AuthorizeAttributeとは少し異なります。それについては、非常に短いmsdnの存在の認知を除いて、これについてはまだinterwebs上に何もありません。 私の最初の質問は、このタイプの属性は私の通常のMVCアクションでも機能するのでしょうか?それとも、重複する認可属性クラスが必要ですか? – GeekyMonkey
ベータ版では、MVCコントローラ用とAPIコントローラ用の2種類の属性が必要です。我々はこれをenxtドロップで改善することを検討しています。 – marcind
私は、カスタムRoleProviderを作成し、これを私のDbDataControllerの上に置くことで問題を回避しようと決めました 'AuthorizeAttribute = System.Web.Http.AuthorizeAttribute;を使用して ' 私はこれを自分のデータアクションまたはクラス) '[Authorize(Roles =" SuperAdmin ")]' 私はまだ必要なすべてを行うわけではありませんが、それはスタートです。場合によっては、特定のレコードにアクセスできるかどうかを調べるためにユーザーレコードを調べる必要があるため、レコードをカットしません。 これらの新しいコントローラで動作するのと同じMVCフィルタがあれば、もっとうれしいでしょう。 – GeekyMonkey