У меня есть то, что кажется общей проблемой с приложениями SaaS, но я нигде не видел этот вопрос.
Я использую ASP.NET MVC с проверкой подлинности с помощью форм. Я реализовал пользовательский поставщик членства для обработки логики, но у меня есть одна проблема (возможно, проблема в моем представлении о системе).
Как и во многих приложениях SaaS, клиенты создают учетные записи и используют приложение так, как будто они присутствуют только (они видят только свои товары, пользователей и т. Д.). В действительности, существуют общие контроллеры и представления, представляющие данные в зависимости от клиента, представленного в URL. Когда я вызываю что-то вроде MembershipProvider.ValidateUser, у меня есть доступ к принадлежности клиента к пользователю в объекте User - у меня нет контекста запроса, чтобы сравнить, является ли это запросом данных для того же клиента, что и пользователя.
В качестве примера
Одна компания под названием ABC переходит на abc.mysite.com
Другая компания под названием XYZ переходит на xyz.mysite.com
Когда пользователь ABC звонит
http://abc.mysite.com/product/edit/12
У меня есть атрибут [Authorize] для метода Edit в ProductController, чтобы убедиться, что он вошел в систему и имеет достаточные разрешения для этого.
Если тот же самый пользователь ABC попытался получить доступ
http://xyz.mysite.com/product/edit/12
Я бы не хотел проверять его в контексте этого звонка. В ValidateUser пользователя MembershipProvider у меня есть информация о пользователе, но не о запросе. Я могу сказать, что пользователь из ABC, но я не могу сказать, что запрос для XYZ в этот момент в коде.
Как мне решить эту проблему?