【问题标题】:Limit access to Data by record owner in .NETCore限制 .NET Core 中记录所有者对数据的访问
【发布时间】:2017-10-17 00:02:03
【问题描述】:

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

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

我有一个存储库功能来编辑“交易”对象。

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 包。

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

【问题讨论】:

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


    【解决方案1】:

    将它保存在存储库中应该没问题。我不确定你是否如何生成记录,我建议在你的存储库中你应该有 ff:

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

    使用它来显示登录用户的所有交易。

    那么你的编辑功能可以是

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

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

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

      有两种情况

      1. 您想显示系统中的所有交易吗?
      2. 您只想显示用户创建的交易吗?

      场景 1: 如果您只为用户显示所有交易,您可能需要在控制器中构建一个逻辑,以防止用户修改其他人创建的交易。 (类似于@Redan 的建议,也包括更多的视图逻辑)

      场景 2:无需验证。您可以处理数据,因为您将显示用户创建的记录。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-02
        • 2023-04-11
        • 2012-11-15
        • 2014-12-25
        • 1970-01-01
        • 2010-11-15
        • 2021-06-07
        • 1970-01-01
        相关资源
        最近更新 更多