Мы разрабатываем модное в настоящее время мультитенантное приложение SaaS (общая база данных, общая схема), и есть одна вещь, которая мне не нравится в этом:
public class Domain : BusinessObject
{
public virtual long TenantID
{ get; set; }
public virtual string Name
{ get; set; }
}
TenantID
сводит меня с ума, так как его приходится учитывать почти везде, и это хлопотно с точки зрения безопасности: что произойдет, если злонамеренный пользователь API изменит TenantID
на какое-то другое значение и все перемешает .
Что я хочу сделать, так это полностью избавиться от этого TenantID
в наших доменных объектах и иметь дело с NHibernate или SQL Server.
Из того, что я уже читал в Интернете, это можно сделать с помощью CONTEXT_INFO
(здесь реализация на основе NHibernate ), фильтры NHibernate , Представления SQL и их комбинации.
Теперь мои требования следующие:
- Удалить все упоминания
TenantID
из доменных объектов
- ... но SQL Server вставляет его в случае необходимости (думаю, это достигается с помощью ограничений
default
)
- ... и, очевидно, обеспечивает поддержку фильтрации на основе этого критерия, чтобы клиенты никогда не видели данные друг друга
- Если возможно, избегайте представлений SQL Server.
- Иметь решение, которое прекрасно сочетается с NHibernate, MARS SQL-серверов и общим характером SaaS-приложений с высокой одновременностью
Что вы думаете об этом?