在 Web API 中实现字段/列级安全性

tea*_*ime 6 .net c# security asp.net-web-api

我有一个 .NET Web API,允许客户端返回人员和相关数据的详细信息。系统中有许多非固定角色(它是多租户的),每个角色都可以访问特定字段,例如管理员可以看到出生日期,非管理员不能。

该应用程序的结构是:

客户端控制器 > 业务/服务层 > 存储库 > 数据库

目前,数据访问是通过用于添加/更新/删除的 EntityFramework 和用于查询的 Dapper 组合来管理的。

我的问题是:是否有一种例外的标准/通用方法可以在字段级别过滤发送到客户端的数据,并在更新数据库中的模型之前从客户端返回?理想情况下,如果有一些示例代码或应用程序来演示该方法。

我对此的最初想法是在将 ViewModel 发送到客户端之前对其进行过滤,并在更新 EntityFramework 模型之前执行检查,但这似乎是脱节的。而且我也不是 100% 认为这两种方法都是最好的。

我考虑过的其他可能是:

  • 使用格式化程序在发送到客户端之前删除数据,并使用自定义安全属性在执行控制器操作之前过滤数据。
  • 摆脱 EntityFramework 并实现我自己的安全数​​据访问层来处理所有这些
  • 在数据库级别实施安全性
  • 每个角色每个实体一个 ViewModel,尽管我对此不以为然,因为对于非固定角色,这可能很快就会崩溃。

我不知道有任何框架可以提供字段级安全性,但许多商业产品提供了非常可配置的字段级安全性,例如 SalesForce、Microsoft CRM 等。本质上,我想实现类似的东西,但规模较小。