多租户应用程序允许一个用户访问许多租户帐户?

JK.*_*JK. 6 c# ajax asp.net-mvc multi-tenant jsonresult

我正在使用每个租户模型一个数据库编写多租户应用程序.我允许每个用户帐户访问多个租户(只要该租户已授予他们访问权限)

发送到浏览器的每个页面都包含Site.Master中的当前TenantId

<%= Html.Hidden("TenantId") %>
Run Code Online (Sandbox Code Playgroud)

但是当从浏览器发出任何请求(提交按钮,AJAX GET或AJAX POST)时,实际上不会检查此TenantId是否与用户当前的TenantId匹配.

现在,如果用户打开一个选项卡,TenantId = 1,则连接到另一个选项卡中的另一个租户,TenantId = 2,然后切换回第一个选项卡,它可以访问租户2中的数据.

我该怎么做才能解决这个问题?我有大量现有的ActionResult和JsonResult方法,我不想通过它们中的每一个并添加

if (request.TenantId != user.CurrentTenantId) return false
Run Code Online (Sandbox Code Playgroud)

因为这将是大量的重复工作

我可以将基本控制器更改为始终读取TenantId的值吗?这可能适用于提交的请求(ActionResult),但是AJAX请求呢?

如何检查JsonResult操作中页面的TenantId而不更改每个现有的AJAX方法(其中有很多)?

Nic*_*cht 2

您可以在 Global.asax.cs 文件中的 Application_Request 事件中检查您的情况。如果您需要的是通过 MVC 模型绑定填充,那么可以编写一个自定义 ActionFilter 来检查它并通过 GlobalFilter 将其注册到所有操作。