使用Identity User过滤数据记录

时间:2016-06-15 15:08:18

标签: asp.net-mvc linq authorization database-connection

我有一个包含公司记录的数据库。当用户登录时,他/她应该只看到他/她被授权的那些记录。我已经实现了ASP.net MVC Identity,我使用Code First和Entity Framework开发了数据库。

这似乎是一个非常简单的编程任务,但我显然忽略了一些东西,因为我在asp.net或msdn网站上找不到解决方案。

我正在考虑在控制器中使用LINQ语句,我使用Where语句来仅过滤那些Authenticated用户(.GetUserID())等于Company UserId的记录。这是正确的方法吗?

我的CompanyController非常标准,如下所示

 public class CompanyController : Controller
{
    private ApplicationDbContext db = new ApplicationDbContext();

    public ActionResult Index(int? id, int? csearchid)
    {

        var viewModel = new CompanyIndexData();
        viewModel.Companies = db.Companies
          .OrderBy(i => i.CompanyName)

1 个答案:

答案 0 :(得分:0)

如果您是在多层中设计应用程序,则可以使用存储库设计模式对其进行抽象。

在您的情况下,您可以使用扩展方法,如:

public IQueryable<Company> ForUser(this IQueryable<Company> query, long userId)
{
    return query.Where(x => x.UserId == userId);
}

并在您的控制器中使用它:

public ActionResult Index(int? id, int? csearchid)
{

  var viewModel = new CompanyIndexData();
  viewModel.Companies = db.Companies.ForUser(this.GetUserId()).OrderBy(x => x.CompanyName);
  ...
}