2017-10-17 64 views
0

我是比較新的.NETCore 2.0,想知道,以確保一個人只有他們創建和查看/編輯記錄可以是認爲「擁有者」的最佳途徑記錄。限制訪問的數據通過記錄所有者在.NETCore

我知道如何從控制器保存前將當前用戶添加到創建對象,但我不知道最好的方式來檢查編輯/讀取訪問權限。我應該在控制器中保留這個邏輯嗎?或者在Model/Repository上執行此操作?

我有一個庫函數編輯「交易」對象。

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

我覺得這個有很多在我的整個應用程序的編碼和不知道是否有一個更內置的方式來檢查與實體框架或.NET的身份包。

如果有幫助,我不關心管理員看到的一切。每個用戶只能看到自己的記錄。

回答

2

保持其在信息庫應該罰款。我不知道,如果你是如何生成的記錄,我建議在你的倉庫,你應該有FF:

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

使用它來顯示登錄的用戶的所有交易。

那麼你的編輯功能可以

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

因爲你確信他沒有看到其他人的紀錄。

希望這有助於

0

首先,您可以使用.NET核心身份的(link)(如果這就是你的應用需求),你可以實現自己的用戶管理邏輯或。

其次,如果我理解正確的交易只能由誰創建的用戶操作。

有2個場景

  1. 你想顯示系統中所有的交易?
  2. 是否只想顯示用戶創建的交易?

場景1: 如果只顯示用戶的所有交易,您可能需要在控制器中建立邏輯,防止用戶修改其他人創建的交易。 (類似於@Redan建議,包括更多的邏輯視圖的爲好)

方案2:不需要驗證。您可以操作數據,因爲您將顯示用戶創建的記錄。

無論哪種方式,需要用戶與實體貿易實體和關聯保持用戶數據。我也認爲任何其他實體的情況都是一樣的。