小编Gor*_*aBC的帖子

将 AuthorizationPolicy 绑定到 Controller/Action 而不使用 AuthorizeAttribute

我想向我的 .NET Core API 添加授权。假设我有一个具有以下操作的 PersonController:

  • GetPerson(根据 id 检索 Person)

  • PostPerson(添加新人员)

  • DeletePerson(删除一个人)

     [Route("[controller]")]
     [ApiController]
     public class PersonController : ControllerBase
     {
         [HttpGet("{id}")]
         public async Task<ActionResult<PersonModel>> GetPerson(int id)
         {
             //
         }
    
         [HttpPost]
         public async Task<ActionResult<PersonModel>> PostPerson(PersonModel model)
         {
            //
         }
    
         [HttpDelete("{id}")]
         public async Task<ActionResult> DeletePerson(int id)
         {
            //
         }
     }
    
    Run Code Online (Sandbox Code Playgroud)

对于这个例子,我将使用两个角色。“ SuperAdmin ”应该能够执行所有操作,“ PersonReader ”应该只能执行 GetPerson 调用。尝试将 PostPerson 或 DeletePerson 作为 PersonReader 应该会失败。

我创建了以下授权策略:

                options.AddPolicy("SuperAdmin", policy =>
                    policy.RequireAuthenticatedUser()
                    .RequireRole("SuperAdmin")
                );
                options.AddPolicy("PersonReader", policy =>
                    policy.RequireAuthenticatedUser()
                    .RequireRole("PersonReader")
                );
Run Code Online (Sandbox Code Playgroud)

但现在我想将这些策略绑定到控制器操作,说明需要哪些策略才能执行控制器操作。我知道这可以通过这样的authorizationAttribute来完成:[Authorize(Policy="X"]但我希望能够在不使用AuthorizationAttributes的情况下做到这一点。

为什么我无法使用[授权]属性?
我不会讲太多细节,但是控制器的源代码是生成的。这意味着一旦再次生成,所有手动更改都将被覆盖。因此,授权不应该在控制器中。

在 …

c# authorization authorize-attribute asp.net-core

5
推荐指数
1
解决办法
1181
查看次数