【发布时间】:2017-11-25 00:31:17
【问题描述】:
我正在尝试创建一个多租户系统,到目前为止,在保存一切方面都运行良好。但是早些时候,我偶然发现了一个问题,我有这个服务:
public interface EmployeeService : IEmployeeService
{
private IEmployeeRepository _employeeRepository;
public EmployeeService(IEmployeeRepository employeeRepository)
{
_employeeRepository= employeeRepository;
}
public Employee GetById(int employeeId)
{
return _employeeRepository.GetById(employeeId);
}
}
因此,从 MVC 控制器调用此服务以检索具有 Id 的员工。问题是我希望能够检查在通话期间传递的employeeId是否由调用它的租户拥有,否则他可以将任何Id放入其中并检索任何人。
我能想到的最简单的解决方案是更改签名以包含tenantId:
public Employee GetById(int tenantId, int employeeId)
但我在想是否有更好的方法。我觉得 GetById 方法应该只有 1 个参数。可能是我想多了,我不确定。
我可以考虑的另一种方法是让 EmployeeService 拥有一个成员 TenantId,当它被实例化时,在调用 GetById 之前填充并使用 TenantId 来检查它是否拥有正在检索的employeeId。但我无法完成这项工作,因为 EmployeeService 是在启动期间在 ConfigureService 中创建的,并且只有在有人成功登录后我才会知道 TenantId。
【问题讨论】:
标签: c# asp.net-core multi-tenant