限制.NETCore中记录所有者对数据的访问

时间:2017-10-17 00:02:04

标签: .net asp.net-mvc entity-framework asp.net-core

我对.NETCore 2.0比较陌生,想知道确保一个人只能查看/编辑他们创建的记录并且是该记录的“所有者”的最佳方法。

我知道如何在从控制器保存之前将当前用户添加到Create对象,但我不确定检查Edit / Read访问权限的最佳方法。我应该将此逻辑保留在控制器中吗?或者在Model / Repository上强制执行此操作?

我有一个Repository函数来编辑“Trade”对象。

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

我觉得在我的整个应用程序中有很多编码,并且不确定是否有更多内置方法可以检查Entity Framework或.NET的Identity包。

如果有帮助,我不担心管理员会看到一切。每个用户只能看到自己的记录。

2 个答案:

答案 0 :(得分: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);
}

因为你确定他没有看到别人的记录。

希望这会有所帮助

答案 1 :(得分:0)

首先,您可以使用.net核心身份(link)(如果这是您的应用程序需要的),或者您可以实现自己用户的管理逻辑。< / p>

其次,如果我理解正确的交易只能由创建该交易的用户操纵。

有两种情况

  1. 您想显示系统中的所有交易吗?
  2. 您是否只想显示用户创建的交易?
  3. 场景1: 如果只显示用户的所有交易,则可能需要在控制器中构建逻辑,以防止用户修改其他人创建的交易。 (类似于@Redan的建议,包括更多的视图逻辑)

    场景2:无需验证。您可以在显示用户创建的记录时操纵数据。

    无论哪种方式,您都需要将用户实体与贸易实体相关联并保留用户数据。我也认为对任何其他实体都是一样的。