首页 > 解决方案 > 如何在带有 EF Core 的 AspNet Core 3.1 上使用基于资源和角色的授权?

问题描述

我正在使用基于角色的授权开发市场后端应用程序,并且我正在使用这些角色处理对操作的访问。管理员管理所有产品及其过滤类别,而卖家则选择要出售的产品及其过滤选项和价格。顺便说一句,我对 asp.net core 和 ef core 还很陌生,所以如果这是一个简单的请求,请原谅我。

如果卖家发送包含此类数据的 put 请求,它可以更新过滤器选项名称,但该操作应仅对其他路径/操作上的管理员可用。

除了为每个动作创建特定模型之外,是否有一个简单的好解决方案?当它是另一个资源的一部分时,阻止对该资源的更新访问?

{
  "productId": "1",
  "options": [
    {
      "filterCategoryId": "2",
      "filterOptionId": "4",
      "filterOptionName": "Blue"
    },
    {
      "filterCategoryId": "1",
      "filterOptionId": "1",
      "filterOptionName": "XL"
    }
  ],
  "price": "123.00",
  "amount": "5"
}

标签: c#asp.net-coreentity-framework-corerole-base-authorizationresource-based-authorization

解决方案


您可以User.IsInRole("roleName")在 Action 中使用来控制是否可以更改过滤器选项。例如:

public async Task<ActionResult>(ProductDetails p)
{
    if(User.IsInRole("Administrator"))
    {
         //Update Filter Names
    }

    //do whatever else you need to...
}


推荐阅读