如何显示特定用户使用 ASP.NET 核心、标识框架和实体框架创建的内容



我正在尝试创建一个 ASP.NET Core Web应用程序,人们可以在其中创建,编辑,删除和查看目标。我能够将实体框架与标识框架结合使用来对用户进行身份验证,但我想授权/显示该用户专门记录的内容。现在,该页面将显示所有用户创建的所有内容。

这是Goals控制器中的索引方法。

[Authorize]
// GET: Goals
public async Task<IActionResult> Index()
{
return View(await _context.Goal.ToListAsync());
}

以下是一些Goals控制器代码,可以拉入UserManager

public class GoalsController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly ApplicationDbContext _context;
public GoalsController(ApplicationDbContext context, UserManager<ApplicationUser> userManager)
{
_context = context;
_userManager = userManager;
}

我已经阅读了几种使用常规旧 Asp.Net 的不同方法,但没有说明 ASP.NET 核心的最佳实践是什么。我应该使用LINQ吗?

这是目标模型:

public class Goal
{
[Key]
public int TaskID { get; set; }
public string UserID { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
public bool IsSubGoal { get; set; }
[Display(Name = "Due Date")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime? DueDate { get; set; }
[Display(Name = "Created On")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime CreatedOn { get; set; }
[Display(Name = "Last Modified")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime? LastModified { get; set; }
}

UserID是创建目标时存储用户 ID 的位置。

您需要在 LINQ 查询中添加一个筛选器,如下所示:

[Authorize]
// GET: Goals
public async Task<IActionResult> Index()
{
// the instruction below this comment will help to get the Id of the current authenticated user. 
// Make sure you derive your controller from Microsoft.AspNetCore.Mvc.Controller
var userId = await _userManager.GetUserIdAsync(HttpContext.User);
return View(await _context.Goal.Where(g => g.UserID == userId).ToListAsync());
}

相关内容

  • 没有找到相关文章

最新更新