【问题标题】:Restrict access to some data from db using asp.net authorization使用 asp.net 授权限制对 db 中某些数据的访问
【发布时间】:2017-12-23 23:55:35
【问题描述】:

假设我有一个表X,其中列有:NameRole。主页显示来自表XName's 列表。当以某个特定用户(分配了 ASP.NET 角色)身份登录时,我只想显示 Name's 列表,以显示 Role 与当前登录用户匹配的行。这是否可能通过例如以某种方式装饰 EF 功能?我想避免在应用程序中调用GetList 的所有地方对if's 进行硬编码。

我首先使用 EF 6 和 db、ASP.NET、MVC 6。

编辑

GetList 方法是 GenericDataRepository 的一部分:

    public virtual IList<T> GetList(Expression<Func<T, bool>> where, params Expression<Func<T, object>>[] navigationProperties)
    {
        IQueryable<T> dbQuery = this.Context.Set<T>();

        foreach (var navigationProperty in navigationProperties)
        {
            dbQuery = dbQuery.Include(navigationProperty);
        }

        var list = dbQuery.AsNoTracking().Where(@where).ToList();

        return list;
    }

【问题讨论】:

  • 有可能,但不是通过装饰方法。可以通过过滤 EF 层中的角色来实现。
  • @ChetanRanpariya 通过“过滤”你的意思是改变所有GetList 方法?
  • GetList 方法属于哪个类?谁调用那个方法?能分享一下GetList方法的代码吗?
  • @ChetanRanpariya 我用代码示例编辑了帖子。许多其他特定的存储库正在调用此方法。
  • 我说错了,特定的存储库不是针对角色的,而是针对业务实体的。但是我发现THIS 非常有用,我认为这是我的问题的答案。无论如何感谢您的建议。

标签: c# asp.net asp.net-mvc entity-framework model-view-controller


【解决方案1】:

你想要一个business layerGetList 变为 GetListForUserRole 并采用角色参数。然后应用程序的多个部分可以调用此方法并为其提供角色。

【讨论】:

  • 这是我想要避免的,因为在实际场景中,我有大约 10 个包含用户特定数据的表和 100 多个(估计)我调用这些方法的位置 GetList
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2019-07-23
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多