You need to enable JavaScript to run this app. 如何将ASP.NET Core Identity关联到自定义实体实现私有帖子管理?
优惠活动
大模型
产品
解决方案
定价
更多

如何将ASP.NET Core Identity关联到自定义实体实现私有帖子管理?

实体模型匹配度核查

对照你的核心需求(基于ASP.NET Core Identity的邮箱密码认证、帖子支持标题与正文存储、用户仅能查看自己发布的内容),只要你编写的代码满足以下要点,就完全符合需求,不需要额外改动:

  • 帖子实体包含Title、Body两个文本类型属性,用于存储用户输入的内容
  • 帖子实体和继承自IdentityUser的自定义ApplicationUser类做了关联,通过UserId外键建立用户对帖子的一对多导航关系
  • ApplicationDbContext中正确注册了DbSet<Post> Posts,并在模型构建阶段给UserId配置了必填约束和数据库索引,既避免出现无归属的无效帖子,也能提升后续按用户筛选帖子的查询性能
  • 没有在数据模型层面给帖子配置公开访问的权限规则,从数据存储层就把帖子和特定用户做了强绑定
核心功能实现示例

为已登录用户创建新帖子

实现时一定要完全从服务端获取当前登录用户的ID,绝对不能接收前端传来的用户ID参数,避免出现越权绑定他人内容的漏洞:

  • 在帖子控制器上加上[Authorize]特性,强制未登录用户无法访问创建接口
  • 创建帖子的核心逻辑可以参考如下写法:
// POST: Posts/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(PostEditModel inputModel)
{
    if (!ModelState.IsValid)
    {
        return View(inputModel);
    }
    // 从当前登录用户的身份声明中提取用户ID,全程不依赖前端传值
    var currentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
    var post = new Post
    {
        Title = inputModel.Title.Trim(),
        Body = inputModel.Body.Trim(),
        UserId = currentUserId,
        PublishTime = DateTimeOffset.UtcNow
    };
    _context.Posts.Add(post);
    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(Index));
}
  • 配套的创建视图只需要提供标题、正文两个输入控件即可,完全不需要暴露用户ID相关的隐藏字段。

展示当前登录用户的所有帖子

查询时必须在数据库查询语句的层面加用户ID的筛选条件,不能把全表帖子都查出来后再在内存里过滤,既容易出现越权漏洞,也会浪费数据库性能:

// GET: Posts
public async Task<IActionResult> Index()
{
    var currentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
    // 在数据库查询阶段就绑定当前用户ID,从源头过滤出属于当前用户的帖子
    var myAllPosts = await _context.Posts
        .Where(post => post.UserId == currentUserId)
        .OrderByDescending(post => post.PublishTime)
        .ToListAsync();
    return View(myAllPosts);
}

安全提示:后续做帖子详情查看、编辑、删除功能时,必须在接口逻辑里校验待操作帖子的UserId和当前登录用户ID是否一致,校验不通过直接返回403状态码,不能只靠列表页的筛选逻辑做权限控制。


内容的提问来源于stack exchange,提问作者Agus Mariscotti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.07 22:06:03