Разрешения на уровне строк или конфиденциальность в стиле facebook в ASP.NET MVC 3? - PullRequest
1 голос
/ 06 ноября 2011

Я работаю над проектом, который требует пользовательских гранулярных настроек безопасности и конфиденциальности.По сути, мне нужно иметь возможность ограничить доступ к данным на основе пользователя, выполняющего запрос.Достаточно просто, правда?Вот несколько уловок, хотя ..

  1. Пользователи должны храниться в таблице пользователей.Создание учетных записей пользователей Windows, пользователей SQL-сервера или ролей SQL-сервера неприемлемо для этого приложения.
  2. Критерии безопасности должны определяться любым количеством источников, например местоположением пользователя, уровнем оплаты, специальностью и т. Д.

Прямо сейчас мы реализуем это, генерируя предложение SQL "where" и добавляя его в конец каждого запроса перед его выполнением.Это ограничивает нас от возможности использовать более новые технологии, такие как Entity Framework, а также несет с собой и другие ограничения и проблемы с производительностью.

Любая помощь или идеи будут с благодарностью.Пожалуйста, дайте мне знать, если необходимы дополнительные разъяснения.

Спасибо!Jason

1 Ответ

1 голос
/ 06 ноября 2011

Вы все еще можете использовать Entity Framework. Есть несколько способов сделать это с EF:

  • Создание настраиваемого поставщика упаковки, который внедряет предложения WHERE, например this .

  • Предоставлять только IQueryable s, которые содержат предварительно Where() d данные (но остерегаться отношений)

  • Бросить исключение в ctor объекта, если текущий пользователь не имеет к нему доступа (возможно, это не очень хорошая идея)

...