我对.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包。
如果有帮助,我不担心管理员会看到一切。每个用户只能看到自己的记录。
答案 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: 如果只显示用户的所有交易,则可能需要在控制器中构建逻辑,以防止用户修改其他人创建的交易。 (类似于@Redan的建议,包括更多的视图逻辑)
场景2:无需验证。您可以在显示用户创建的记录时操纵数据。
无论哪种方式,您都需要将用户实体与贸易实体相关联并保留用户数据。我也认为对任何其他实体都是一样的。