静态方法成员身份数据泄漏

本文关键字:泄漏 数据 身份 成员 静态方法 | 更新日期: 2024-09-24 11:07:19

我想使用实体框架从数据库中获取结果,并使用静态方法根据asp.net用户是否为管理员来筛选这些结果。

给定此代码,是否会有非管理员用户将获得管理员结果的实例?

如果是这样的话,我将如何使用静态方法来实现我想要的结果?

public class Listings
{
    public static List<Listing> GetListings()
    {
        bool isAdmin = User.IsInRole("admin");
        List<Listing> listings;
        using(DBContext dbContext = new DBContext())
        {
            listings = (from l in dbContext.Listings
                        where l.Public || isAdmin
                        select l).ToList();
        }
        return listings
    }
}

静态方法成员身份数据泄漏

这取决于从哪里获得DbContext。它的实例方法不是线程安全的。

如果它是在ASP.NET请求作用域中创建的(每个独立请求中都有一个新实例),那么您是安全的,代码是正确的。

如果它是共享的,那么任何事情都可能发生,很可能您会从对同一数据库上下文的并发访问中获得异常。

从类似线程了解更多信息

每个web请求一个DbContext。。。为什么?