在ASP中存储用户角色的正确方法.. NET Core MVC



. NET Core MVC项目,具有基于角色的授权。我的系统中有5个不同的角色。基于角色,任何用户都可以访问不同的section/操作。

我当前的实现看起来是这样的。

[Authorize(Roles = "Admin,Supervisor,SeniorContributor,Contributor,SeniorConsumer,Consumer")]
public async Task<IActionResult> Index() 
{
..
}
[Authorize(Roles = "Admin,Supervisor,SeniorContributor,Contributor")]
public async Task<IActionResult> Edit(int Id) 
{
..
}
[Authorize(Roles = "Admin")]
public async Task<IActionResult> DeleteConfirmed(int Id) 
{
..
}

正如您所看到的,我在授权属性中提到了角色作为字符串。这是正确的方法吗?或者我将它存储在某个enum中并在这里使用它,或者这样做的最佳实践是什么?

我认为这实际上是一个非常好的问题。这些基于属性/注释的解决方案经常被供应商宣传,但它们存在可维护性、可扩展性和客户端问题,所以我个人总是避免使用它们。

使用标准模式

将授权逻辑放在易于适应更改的类中,并且是可测试的:

  • 适用于所有端点的规则的过滤器类
  • 应用于端点子集的策略类
  • 在每个方法中使用特定的代码

这些选项还可以让您更好地控制返回给客户端的错误响应,并且以一致的方式使其工作非常重要—例如属性403响应不应该使用与其他授权检查不同的错误格式。

。Net实际上有一些很好的API策略特性,就像在这个代码示例中一样,但我不知道你是否可以在web后端使用它。

ROLES AND CLAIMS

在。net中,角色只是一个字段—您应该确保您的授权逻辑能够访问完整的claimprincipal。这将在授权规则(和角色名称)更改时为您提供最佳选项。

最新更新