gpt4 book ai didi

c# - 在 Multi-Tenancy .net 项目中实现角色的最佳方式是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:56 25 4
gpt4 key购买 nike

我的应用程序是带有 Entity Framework 6 的 .NET 4.7 Web Api。

这是我正在构建的软件即服务工具。在我的应用程序中,AspNetUser 和公司之间存在多对多关系。

一个用户可以有很多公司,一个公司可以有很多用户。用户需要根据要与之合作的公司而具有不同的角色/权限集。实现这样的东西的最佳方法是什么?

我考虑过将 CompanyId 列添加到 AspNetUserRoles 表中,这样用户对于与其相关的不同公司将具有不同的角色。我不确定这是一个很好的实现,它可能会破坏授权的工作方式,所以在我对事情的工作方式有更清晰的了解之前我不想碰它。

到目前为止我找到了this guide关于 Multi-Tenancy 应用程序的基于资源的授权。这似乎是我正在寻找的东西,但它适用于 .NET Core,我不确定它是否适用于 .NET 4.7。

我无法找到 .NET 4.7 的类似内容,因此我联系了堆栈溢出社区。

最佳答案

如果您是从头开始构建它,我建议切换到 ASP.NET Core 并利用基于资源的授权。

我会建议重新考虑在租户之间共享数据库。对于 SaaS 应用程序来说,这并不是一个好主意。除非您需要节省一些钱并且愿意增加代​​码的复杂性。你可以阅读Multi-tenant SaaS database tenancy patterns .

如果您想坚持现有的,我只能建议引入与 AspNetUser 和 Company 有关系的新类 Employee。这就是您如何设法拥有对许多公司来说可能很紧张的单一用户,但另一方面,公司将只有员工集合。

根据角色,您可以执行类似于用户-员工-公司关系的操作。由于用户角色需要由应用程序所有者(您)管理,因为您在 Controller 和操作上设置授权属性,所以您只允许公司管理员选择您定义到 CompanyRole 类的角色。公司可以有多个 CompanyRole 和多个 AspNetUSerRole。

例子:

您设置角色 SuperAdmin[对应用程序和数据具有绝对控制权的人](可能是您和您的一些同事),CompanyAdmin[对公司具有绝对控制权的人](可能是在您的应用程序), EmployeeAdmin[已授予管理公司内部员工访问权限的人](可能是公司人力资源部门的人), EmployeeReader[已授予公司内部只读员工访问权限的人](可能任何人都可以阅读有关其他员工的信息)等。取决于您的需求以及您的授权权限的粒度或您希望拥有的权限。

接下来,您让 CompanyAdmin 创建一组与其公司紧密相关且与您的角色相关的 CompanyRole 条目。例如,CompanyRole 将是 HumanResourcesAdmin,并且与您的角色 EmployeeAdmin 有关系。

接下来,CompanyAdmin 需要创建新的 Employee 并说明该员工具有这些 CompanyRoles。您需要将 Employee 与您的帐户配对(如果不存在,他需要注册)。这可以通过您在创建员工后发送的电子邮件中的邀请链接来完成,或者公司管理员单击按钮“邀请用户”。

接下来,在用户注册/登录后,您需要处理他想登录的公司,并根据它轻松地为他的身份添加正确的角色。

清楚了吗?

关于c# - 在 Multi-Tenancy .net 项目中实现角色的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48000527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com