【发布时间】:2015-05-19 21:04:32
【问题描述】:
我正在改造一个 asp.net MVC Backoffice 以获得完整的多租户支持。
由于我决定使用分片来实现租户之间的完美分离,因此我需要在每个 viewModel 中访问一些 Auth 信息(租户 ID),只有这些信息我才能为指定的租户创建正确的连接。
为了传递该信息,我有 3 条规则:
- 我不想使用会话变量
- 我不想使用 ViewBag
- 我不想为每个 VM 添加一个新对象以获取身份验证信息
最重要的是,我想要一个“无代码”的解决方案,完美的场景是访问 VM 内的身份验证信息,例如在控制器调用中将其作为属性传递。
我已经重写了 Controller OnAuthorization 以便每次调用它时都会将tenantId 添加到我的基本控制器(这是我所有控制器的基础),这样我总是可以在每个控制器中捕获tenantId,现在我只需要一个将属性中的 TenantId 传递给每个 VM 的方法,类似于以下伪代码
[Authorize]
[TenantId AS A PARAM]
public ActionResult Index()
{
myViewModel vm = new myViewModel();
vm.method();
return this.View(vm);
}
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-mvc-4