EF Core 中的 ASP.NET Core 5 MVC 和 Identity - 基于资源的授权

Posted

技术标签:

【中文标题】EF Core 中的 ASP.NET Core 5 MVC 和 Identity - 基于资源的授权【英文标题】:ASP.NET Core 5 MVC and Identity in EF Core - resource based authorization 【发布时间】:2021-08-24 02:47:41 【问题描述】:

我有一个学习项目。我想为用户实现基于资源的授权。我在控制器中开发了一个受保护的方法UserId(),我在 get 和 post 方法上调用它,类似于下面显示的代码。

我只是想问一下,这个解决方案是否可行,或者使用 Identity 框架有更好的方法来做到这一点,非常欢迎任何想法 :)

// protected UserId method
protected string UserId()

    return User.FindFirstValue(ClaimTypes.NameIdentifier);


// GET view for categories, here I call the UserId method to check if items for that user exist.
public IActionResult Index()

    List<Category> model = _categoryService.GetCategories().Where(x => UserId().Contains(x.UserId)).ToList();
    return View(model);


// POST method for category
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Category category)

    if (ModelState.IsValid)
    
        category.UserId = UserId();
        _categoryService.CreateCategory(category);
        return RedirectToAction("Index");
    
    
    return View(category);


// my Category model
public class Category

    [Key]
    public int ID  get; set; 
    
    public string Name  get; set; 
    public string UserId  get; set; 

【问题讨论】:

【参考方案1】:

在我看来,这个解决方案是最好的。 FindFirstValue 方法是直接根据 claimType 找到 Claims。

这只会搜索声明中的值(在服务器内存中),它不会联系 sql server。

【讨论】:

以上是关于EF Core 中的 ASP.NET Core 5 MVC 和 Identity - 基于资源的授权的主要内容,如果未能解决你的问题,请参考以下文章

这是从 ASP.NET Core Web API 中的 EF Core 5 获得的啥样的响应 [关闭]

带有 EF Core 和 CosmosDB .NET 5 的 ASP.Net Core - IdentityRole 问题

EF Core ASP.Net Core 编辑迁移

.NET Core 1.0ASP.NET Core 1.0和EF Core 1.0简介

为 ASP.NET Core 5.0 - EF Core 5.0 Web App 配置 PostgreSQL 连接字符串以在 MS 或 Linux 云上运行?

基于Asp.net core + EF + Sqlite 5分钟快速上手一个小项目