2017-10-17 1 views
0

私は比較的.NETCore 2.0を新しくし、作成したレコードを閲覧/編集できる最良の方法を知りたい記録。.NETCoreのレコード所有者によるデータへのアクセスを制限する

私はコントローラから保存する前に現在のユーザーをCreateオブジェクトに追加する方法を知っていますが、私は編集/読み取りアクセスを確認する最善の方法がわかりません。コントローラーにこのロジックを保持する必要がありますか?または、これをモデル/リポジトリに適用しますか?

私は、「トレード」オブジェクトを編集するリポジトリ機能を持っています。

public void EditTrade(Trade trade, string currentUserId) 
    { 
     if(trade.Owner != currentUserId) 
      throw new Exception("Not the correct user"); 
     context.Trade.Add(trade); 
    } 

は、私はこのように私の全体のアプリケーション間でのコードとエンティティフレームワークまたは.NETのアイデンティティのパッケージに確認するために、より組み込みの方法があったかどうかわからないの多くを感じます。

助けがあれば、私は管理者がすべてを見ているのを心配していません。すべてのユーザーは自分のレコードしか見ることができません。

答えて

2

リポジトリに保存するのは問題ありません。ログインしているユーザーのすべての取引を表示する

public IEnumerable<Trade> GetTradesByUser(userId){ 
    return _context.Trades 
    .Where(t => t.UserId == userId) 
    .ToList(); 
} 

使用この:あなたがレコードを生成する方法、私はあなたのリポジトリにあなたはFFを持つべきであることを示唆している場合、私はよく分かりません。あなたは彼が他人の記録を見ていないことを確認しているので

、あなたの編集機能は

public void EditTrade(Trade trade) 
{ 
    _context.Trade.Add(trade); 
} 

することができます。これは

0

まず、(それがどのようなアプリケーションのニーズの場合)は、.NETコアアイデンティティの(link)を使用したり、独自のユーザーの管理ロジックを実装することができます役立ちます

希望。

第2に、正しい取引がそれを作成したユーザーによってのみ操作できることを理解している場合。

2つのシナリオ

  1. がありますが、システム内のすべての取引を表示したいですか?
  2. ユーザーが作成した取引のみを表示しますか?

シナリオ1:唯一のユーザーのためにすべての取引を表示 場合は、他の人が作成した展覧会を変更するからユーザーを防ぐあなたのコントローラ内のロジックを構築する必要があるかもしれません。 (@Redanの提案に似ていますが、より多くのビュー論理を含む)

シナリオ2:検証は必要ありません。ユーザーが作成したレコードを表示するときにデータを操作できます。

どちらの方法でも、ユーザーエンティティをトレードエンティティに関連付けてユーザーデータを保持する必要があります。私はまた、それが他のエンティティと同じになると思う。

関連する問題