我有一个包含公司记录的数据库。当用户登录时,他/她应该只看到他/她被授权的那些记录。我已经实现了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)
答案 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);
...
}