Что все делают для обработки безопасности (поиска и изменения) отдельных записей в приложении ASP.NET MVC? Это приложение имеет уровень Service/Business и уровень доступа к данным, которые полностью отделены от пользовательского интерфейса Web. Я уже использую поставщики членства и ролей для проверки подлинности и авторизации для определенных областей/функций в моем приложении, но теперь мне нужно защитить отдельные записи.
Например, скажем, Боб может создавать и редактировать собственные записи FooBar. Я хочу, чтобы другие пользователи не могли просматривать или редактировать записи Боба. Я хочу защитить от манипулирования URL-адресами и/или ошибок программирования. Мы также можем разрешить Бобу делиться своими FooBars с другими пользователями, позволяя им просматривать, но не редактировать свои записи.
Есть несколько подходов, которые я придумал:
- Выполняйте проверки безопасности на уровне доступа к данным непосредственно в запросах поиска и изменения.
- Проверьте безопасность на уровне сервиса, выполняя дополнительные запросы безопасности, прежде чем приступать к бизнес-логике.
- Создайте уровень безопасности, который существует между пользовательским интерфейсом и уровнем сервиса. Пользовательский интерфейс выполнит все запросы через уровень безопасности.
- Используйте аспектно-ориентированное программирование (АОП). Создайте аспекты безопасности и украсьте методы уровня сервиса атрибутами безопасности.
Я сделал безопасность на уровне доступа к данным (в запросах) в предыдущих проектах, и он всегда превращается в беспорядок. Я хотел бы знать, что делают все остальные, и какие рамки вы используете, чтобы помочь вам (рамки AOP.)