2017-10-17 68 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:不需要验证。您可以操作数据,因为您将显示用户创建的记录。

无论哪种方式,需要用户与实体贸易实体和关联保持用户数据。我也认为任何其他实体的情况都是一样的。