【发布时间】:2019-08-21 20:12:33
【问题描述】:
我正在寻找一种解决方案/建议,以帮助我创建对 Web api 端点/控制器操作的基于权限的访问。
基于角色的访问不适合,因为我没有可以在 Role("Admin") oder Role("Controller") 等代码中使用的固定规则。
基于声明的权限也是不可行的,因为每个用户/客户可以对每个业务对象/实体拥有不同的权限(例如,对自己的票证的读/写访问权和对其公司的所有票证的读访问权,或者如果它是我公司的技术人员可以完全访问所有客户的所有票证。因此,每个用户将有 10 个甚至数百个声明,我必须在每次访问我的 API 时对其进行评估。
这是一种仅在数据库中的多租户,租户是我们的客户,拥有某种“主租户”,可以访问所有租户数据。
我认为像 Visual Guard 这样的东西可以满足我的需求,但它非常昂贵,而且他们现在不支持 net core,而且他们的文档似乎已经过时了。
我不需要一个可用的解决方案,但我会非常感谢一些提示和技巧,因为我现在正在寻找和搜索一段时间。
关于“数据库权限”的详细信息: 我的意思是在我的前端(Winforms 应用程序)中,我想建立一个安全系统,我可以在其中创建角色并将其分配给用户,并在这些角色中定义用户可以执行哪些操作以及他/她可以对特定执行哪些 CRUD 操作业务对象。每个角色可以有 n 个用户,每个角色可以有 n 个权限。每个权限本身都声明了例如 Create:false、Read:true、Write:true 和 Delete:false。如果未找到特定业务对象的权限,则该 BO 上的 CRUD 将被完全拒绝。
因此,每当调用我的 API 中的某个操作时,我必须检查该用户及其规则是否允许他根据我的数据库中的规则和权限执行该特定操作。
详细说明应用程序结构: 前端将是一个 Winforms 应用程序,它通过 OData 在后台调用 API。我不想完全依赖 Winforms 应用程序中的安全性,因为 API 可以从 Internet 访问,而且我不能确定用户是否会尝试使用他的凭据访问 api 只是为了看看没有什么是可能的“前端过滤器”。因此权限位于 API 中,如果用户尝试访问 s.t.在前端应用程序中,如果可能的话,应用程序本身会“询问”API。 稍后我想创建也使用 Odata Web API 的移动客户端。
【问题讨论】:
-
您是否已经结帐Identity Server Project?
-
我在我的问题中加入了更多细节。 IdentityServer 似乎不支持基于数据库条目的权限。
-
他们的 Policy Server 似乎可以满足我的需求,但这也很昂贵,因此不是真正的解决方案,因为我的应用程序一开始只会被 3 个人使用。
-
“为用户创建和分配角色,并且在这些角色中定义了用户可以执行的操作”,因此您拥有角色并将用户分配给这些特定角色,这对您有很大帮助@ 987654322@
-
不,那不是我想要的。在我编写代码时,角色和用户甚至都不存在。甚至不清楚哪些角色可以访问哪个动作或控制器。