質問

カスタム QueryInterceptor WCFデータを作成することは可能です。すべてのエンタイトでのサービスは1つだけではなく?これは標準のQueryInterceptorです:

[QueryInterceptor("Products")]
public Expression<Func<Product, bool>> OnQueryProducts()
{
    var user = HttpContext.Current.User;
    if (user.IsInRole("Administrator"))
        return (Product p) => true;
    else
        return (Product p) => false;
}
.

私はこのようなことをするのが好きです:

[QueryInterceptor("*")]
public Expression<Func<Object, bool>> OnQueryProducts()
{
    var user = HttpContext.Current.User;
    if (user.IsInRole("Administrator"))
        return (Object p) => true;
    else
        return (Object p) => false;
}
.

何らかの方法がありますか、それとも私のエンティティのすべてのInceptorを統合する必要がありますか?

役に立ちましたか?

解決

残念ながら、QueryInterceptorを使用してワイルドカードを使用することはできませんが、DataServiceのOnStartProcessingRequestメソッドをオーバーライドし、そこでユーザーの役割を確認することで、サンプルと同じ結果を実現できます。

protected override void OnStartProcessingRequest(ProcessRequestArgs args)
{
    var user = HttpContext.Current.User;

    // Only Administrator users are allowed access
    if (!user.IsInRole("Administrator"))
    {
        // Any other role throws a security exception
        throw new SecurityException("You do not have permission to access this Service");
    }

    base.OnStartProcessingRequest(args);
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top