2

ASP.NET MVC アプリで WCF を使用し、データ サービスは (EF 4.1) .mdf ファイルからデータを取得します。ただし、認証で表示したいフィールドがいくつかあります。たとえば、次のようになります。

public static void InitializeService(DataServiceConfiguration config)
{
    config.SetEntitySetAccessRule("Exercies", EntitySetRights.All);
    config.SetServiceOperationAccessRule("GetAllExercies", ServiceOperationRights.All);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
[WebGet]
public IQueryable<Exercise> GetAllExercies(string name, string pass)
{
    if (Membership.ValidateUser(name, pass))
        return CurrentDataSource.Exercies;
    else
        return CurrentDataSource.Exercies.Where(e => e.Public == true);
}

ユーザーが httx://localhost/MyService.svc/Exercies にアクセスすると、ユーザー名とパスが指定されていなくても、すべてを取得できます。
私の一時的な解決策は、GetAllExercies の名前をExerciesに変更することですが、他に良い方法があるかどうかはわかりません...

4

1 に答える 1

2

はい、より良い解決策があります: クエリ インターセプターです。実際、エンティティ セットとサービス操作に同じ名前を使用すると、特定のシナリオで問題が発生する傾向があります ($metadata はクライアントにとって「混乱」します)。また、100% 安全ではありません (ナビゲーション プロパティがある場合は、エンティティへのアクセスを妨げません)。

このhttp://msdn.microsoft.com/en-us/library/dd744842.aspxを参照してください。アイデアは、認証フィルターをエンティティ セット クエリの一部にすることであり、WCF DS サービスは、エンティティ セットがアクセスされるすべての場所で使用されるようにします。

于 2012-01-09T15:56:37.850 に答える