我想向我的 .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的情况下做到这一点。
为什么我无法使用[授权]属性?
我不会讲太多细节,但是控制器的源代码是生成的。这意味着一旦再次生成,所有手动更改都将被覆盖。因此,授权不应该在控制器中。
在 …