Я унаследовал достаточно большое и сложное веб-приложение ASP.NET MVC3, используя EF Code First на SQL Server. Он использует роли членства ASP.NET с аутентификацией базы данных. Действия контроллера защищены атрибутами, производными от AuthorizeAttribute, которые сопоставляют роли с действиями. Существуют методы расширения для более тонких точек, такие как отображение определенного виджета для определенных ролей. Это прекрасно работает, и я хорошо понимаю текущую модель безопасности.
Меня попросили обеспечить более детальную безопасность на уровне данных. Например, пользователь «Заказчик» может видеть только данные (по всей базе данных), связанные с самими собой, а не с другими Заказчиками. Проблема в том, что «Клиент» - это только 1 из 5 различных типов со своими собственными специфическими ограничениями (каждая из 9 ролей является одним из этих 5 типов).
Лучшее, что я могу придумать, - это пройти через все хранилища данных и дополнить каждый оператор / запрос LINQ фильтром для каждого типа пользователя. Даже если бы у меня было на это время, это не самый элегантный способ.
Есть предложения? Я действительно не знаю, с чего начать, поэтому все может быть полезным.
Большое спасибо.