2016-06-15 2 views
0

У меня есть база данных с записями компаний. Когда пользователь входит в систему, он должен видеть только те записи, для которых он авторизован. Я реализовал ASP.net MVC Identity, и я разработал базу данных с использованием Code First и Entity Framework.с использованием Identity User для фильтрации datarecords

Это кажется очень простой задачей программирования, но я, очевидно, что-то пропускаю, поскольку не могу найти решение на сайтах asp.net или msdn.

Я рассматриваю использование инструкции LINQ в контроллере, в которой я использую инструкцию Where, чтобы фильтровать только те записи, в которых пользователь, прошедший проверку (.GetUserID()), равен 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) 

ответ

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); 
    ... 
} 
+0

Благодаря Gentiane, я дам вам знать, если он будет работать для меня. –

Смежные вопросы