0

私は MVC を初めて使用し、モバイル アプリケーション用の Web API を構築しています。asp.net Web API とエンティティ フレームワークを使用しています。

Web API の認証と承認についてよく読んだことがあります。私が不明な部分は、誰がプロパティにアクセスしようとしているかに応じて、エンティティの特定のプロパティへのアクセスを防ぐ方法です。

たとえば、モデルにブックマーク エンティティがあるとします。エンティティは次のようになります。

public class Bookmark
{
    public long ID { get; set; }
    public User Owner { get; set; }
    public Boolean IsPublic { get; set; }
}

public class User
{
    public string UserID { get; set; }
    public DateTime DateJoined { get; set; }
    public string Address {get;set;}
    public virtual ICollection<Bookmark> Bookmarks { get; set; }
}

2つの質問があります。

1) 誰でも ../mysite/username/bookmarks にアクセスできるはずですが、別の人が別の人のブックマークを要求している場合は、公開ブックマークのみを返します。このロジックはどこに置くべきですか?このビジネス ロジックはモデルに含まれている必要があります。このビジネス ロジックを処理するには、DTO のような別のクラス セットを作成する必要がありますか? このようなメソッドをエンティティ フレームワーク クラス自体に追加する例は見たことがありません。

2) ブックマークのセットを返すと、bookmarkController と言うことができます。Bookmark には User プロパティがあるため、アドレスなど、共有したくない情報を含む User のプロパティも返されることに気付きました。

どのように (応答する前にプロパティを無効にするか、別の DTO に割り当てるか)、このシナリオをどこで処理する必要があるか (ユースケースに固有の DTO またはコントローラーにメソッドを追加する) がわかりません。

前もって感謝します。

4

2 に答える 2

0

通常、EF エンティティ クラスの代わりに DTO を返す方が適切です。抽象化を追加するため、公開したくないプロパティを (不注意で) 公に公開することはありません。(機密性の高いプロパティを後で追加するとどうなるかを考えてください)。

したがって、私は間違いなくBookMarkDtos を返します。返されたコレクションは、すべてのパブリック ブックマークとログイン ユーザー自身のブックマークの結合によって作成できます。(共用体は暗黙の個別です)。したがって、他人のプライベート ブックマークが表示されることはありません。

于 2013-05-12T09:16:43.400 に答える