我有一个ASP.NET MVC应用程序。我使用个人用户帐户和身份API,只有canEdit角色中的用户才能编辑数据(我的数据是产品)。 ASPNetUsers和Products实体具有1:N关系(这只是一个例子)。因此,用户拥有(拥有)产品列表。
当用户请求http://localhost:1111/Products
时,该页面应显示先前已登录的该用户的产品列表。
我不确定如何获取当前的ApplicationUser以及如何查询products表以获取属于用户的产品列表。
这是我的ProductsController的代码:
public class ProductsController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: Products
[AllowAnonymous]
public ActionResult Index()
{
string currentUserId = User.Identity.GetUserId();
ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);
//How to modify these sentence to get the products of the current user??
Product product = db.Products.Find();
return View(db.Products.ToList());
}
....
答案 0 :(得分:1)
由于您使用的是个人身份验证,因此您应该能够使用用户ID直接从Application DB访问该用户:
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
这将使用数据库中的用户创建一个对象,然后您可以使用以下内容调用它:
CurrentUser = UserManager.FindById(User.Identity.GetUserId());
要获取当前登录的用户,应自动使用登录用户的详细信息填充User
对象。
由于您拥有[AllowAnonymous]
属性,您还必须确保用户实际使用Request.IsAuthenticated
登录,否则User对象将为null。
将它们全部添加在一起将使您的代码看起来像:
[AllowAnonymous]
public ActionResult Index()
{
if (Request.IsAuthenticated)
{
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
ApplicationUser currentUser = UserManager.FindById(User.Identity.GetUserId());
// assuming there is some kind of relationship between products and users
List<Product> products = db.Products.Where(p => p.User.Equals(currentUser.UserID)).ToList(); // or .email or other field from your users table
// OPTIONAL: Make sure they see something
if(products.Count ==0) // They have no related products so just send all of them
products = db.Products.ToList();
// only send the products related to that user
return View(products);
}
// User is not authenticated, send them all products
return View(db.Products.ToList());
}
答案 1 :(得分:0)
首先,检查Products类中是否有UserId,如果是,则:
string currentUserId = User.Identity.GetUserId();
var userProducts=db.products.Where(p=>p.UserId==currentUserId).Tolist();
//you need to replace in my code the UserId with the name of the user id from your products table.
等于return View(db.Products.ToList());
您只需要编写return View(userProducts);
...和Jake说的一样:删除属性[AllowAnonymous]
答案 2 :(得分:0)
试试这个
Product product = CurrentUser.Products;