У нас есть мультитенантное приложение ASP.NET. До сих пор арендаторы были изолированы друг от друга, однако теперь у нас есть агентства, которые управляют несколькими арендаторами и хотят иметь возможность управлять всеми своими арендаторами с помощью одной учетной записи. Я пытаюсь найти лучший способ добиться этого, надеюсь, без особых изменений в существующих технологиях, которые мы используем.
Соответствующие технические детали:
- AspNetSqlMembershipProvider как для членства, так и для ролей
- C # 4.0 (скоро будет 4.5)
- Формы аутентификации
- Страницы как aspx, так и MVC (v3)
- Предположим, что 100 или более арендаторов, поэтому любое решение должно поддерживать это
Я считаю, что требования очень похожи на модель безопасности для SQL Server. У нас есть один набор логинов, которые представляют всех пользователей, которые могут войти в систему. Пользователи должны иметь возможность назначать роли для одной или нескольких баз данных (клиентов). Пример: пользователь Боб имеет роль администратора в компании A, но только роль пользователя в компании B. У нас также есть роль «системного администратора» для сотрудников моей компании, которая позволяет нам получить доступ к любому арендатору, а также к специализированным административным привилегиям, таким как создание / удаление клиентов. , и т.д.
Я провел много исследований различных библиотек, фреймворков и т. Д., И я не нашел убедительных доказательств того, что какая-то другая библиотека или фреймворк будет лучше, чем то, что у нас есть сейчас. Итак, в настоящее время я думаю о том, чтобы просто выяснить, как заставить поставщика членства в Sql делать то, что я хочу, если только кто-то не может указать мне лучшее направление. Я также не уверен, что знаю, какие термины лучше всего искать в этом.
У меня есть 2 варианта, которые я рассматриваю:
- Добавьте к провайдеру членства лишь несколько ролей и обработайте все вопросы «имеет ли текущий пользователь эту роль в этом клиенте» вне провайдера членства. Поставщик членства будет использоваться для управления базовым доступом к системе.
- Добавьте к поставщику членства роли для конкретного клиента. У нас будет (# ролей) x (# арендаторов) общих ролей в системе. Каждый новый клиент будет добавлять в систему еще один набор ролей, например «Клиент A: Администратор», «Клиент A: Пользователь» и т. Д. Потребуются некоторые дополнительные таблицы для управления отношениями, а также, возможно, некоторый настраиваемый код, чтобы гарантировать, что доступ запрашивает правильную роль, зависящую от клиента, от поставщика членства.
Любой из этих вариантов хорош? Или мне следует искать поддержку в другом месте?